下面我就為大家分享一篇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"'
}instance.post(process.env.API_HOST+'user/login', this.form)
第四步:
<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中文網其他相關文章!