下面我就為大家分享一篇vue2.0 axios跨域並渲染的問題解決方法,具有很好的參考價值,希望對大家有所幫助。
(用的腳手架vue-cli)
第一步: 在main.js中如下宣告使用
import axios from 'axios'; Vue.prototype.$axios=axios;
那麼在其他vue元件中就可以this.$axios呼叫使用
第二步:在webpack設定proxyTable(config之下的index.js)
dev: { 加入以下 proxyTable: { '/api': { target: 'http://api.douban.com',//设置你调用的接口域名和端口号 别忘了加http changeOrigin: true, pathRewrite: { '^/api': '/'//这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://api.douban.com/v2/movie/top250',直接写‘/api/v2/movie/top250'即可 } } },
第三個步驟:
#試一試一下,跨域成功了,但是注意了,這只是開發環境(dev)中解決了跨域問題,生產環境中真正部署到伺服器上如果是非同源還是存在跨域問題,如我們部署的伺服器連接埠是3001,需要前後端聯調,第一步前端我們可以分生產production和開發development兩種環境分別測試,在config/dev.env.js和prod.env.js裡也就是開發/生產環境下分別配置一下請求的位址API_HOST,開發環境中我們用上面設定的代理位址api,生產環境下用正常的介面位址,所以這樣設定
##
module.exports = merge(prodEnv, { NODE_ENV: '"development"',//开发环境 API_HOST:"/api/" })
#
module.exports = { NODE_ENV: '"production"',//生产环境 API_HOST:'"http://api.douban.com"' }當然不管是開發還是生產環境都可以直接要求http://api.douban.com。配置好之後測試時程式會自動判斷目前是開發還是生產環境,然後自動匹配API_HOST,我們在任何組件裡都能用process.env.API_HOST來使用地址如
instance.post(process.env.API_HOST+'user/login', this.form)然後第二步後端伺服器設定一下cros跨域即可,就是access-control-allow-origin:*允許所有存取的意思。綜上:開發的環境下我們前端可以自己配置個proxy代理就能跨域了,真正的生產環境下還需要後端的配合的。某大神說:此方法ie9以下不好使,如果需要相容,最好的辦法是後端在伺服器埠加個代理,效果類似開發時webpack的代理。
第四步:
<template> <p> <ul> <li v-for="item in movieArr"> <span>{{item.title}}</span> </li> </ul> <button @click="sayOut">渲染</button> </p> </template> <script> export default { data () { return { movieArr : [] } }, methods: { sayOut () { this.$axios.get('/api/v2/movie/top250') .then((response) => { console.log(response.data.subjects) this.movieArr = response.data.subjects // 这里要强调一下这个this 箭头函数指的是它的父级也就是vue实例 然后不用箭头函数的话 this是一个undefined 无法.movieArr来给他赋值 这里要注意一下 我被坑了半天 希望小伙伴不要被坑 }) } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> </style>上面是我整理給大家的,希望今後會對大家有幫助。 相關文章:
以上是vue2.0 axios跨域並渲染的問題解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!