溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vue2.0 axios跨域并渲染的問(wèn)題解決方法

發(fā)布時(shí)間:2020-09-16 01:33:02 來(lái)源:腳本之家 閱讀:113 作者:DeadPool丶丶 欄目:web開發(fā)

(用的腳手架vue-cli)

第一步: 在main.js中如下聲明使用

import axios from
'axios';
Vue.prototype.$axios=axios;

那么在其他vue組件中就可以this.$axios調(diào)用使用

第二步:在webpack配置一下proxyTable(config之下的index.js)

dev:
 { 
加入以下
proxyTable:
{
'/api':
{
target:
'http://api.douban.com',//設(shè)置你調(diào)用的接口域名和端口號(hào)
 別忘了加http 
changeOrigin:
true,
pathRewrite:
 { 
'^/api':
'/'//這里理解成用‘/api'代替target里面的地址,后面組件中我們掉接口時(shí)直接用api代替
 
比如我要調(diào)用'http://api.douban.com/v2/movie/top250',直接寫‘/api/v2/movie/top250'即可
}
}
},

第三步:

試一下,跨域成功了,但是注意了,這只是開發(fā)環(huán)境(dev)中解決了跨域問(wèn)題,生產(chǎn)環(huán)境中真正部署到服務(wù)器上如果是非同源還是存在跨域問(wèn)題,如我們部署的服務(wù)器端口是3001,需要前后端聯(lián)調(diào),第一步前端我們可以分生產(chǎn)production和開發(fā)development兩種環(huán)境分別測(cè)試,在config/dev.env.js和prod.env.js里也就是開發(fā)/生產(chǎn)環(huán)境下分別配置一下請(qǐng)求的地址API_HOST,開發(fā)環(huán)境中我們用上面配置的代理地址api,生產(chǎn)環(huán)境下用正常的接口地址,所以這樣配置

module.exports = merge(prodEnv, {
 NODE_ENV: '"development"',//開發(fā)環(huán)境
 API_HOST:"/api/"
})
module.exports = {
 NODE_ENV: '"production"',//生產(chǎn)環(huán)境
 API_HOST:'"http://api.douban.com"'
}

當(dāng)然不管是開發(fā)還是生產(chǎn)環(huán)境都可以直接請(qǐng)求http://api.douban.com。配置好之后測(cè)試時(shí)程序會(huì)自動(dòng)判斷當(dāng)前是開發(fā)還是生產(chǎn)環(huán)境,然后自動(dòng)匹配API_HOST,我們?cè)谌魏谓M件里都能用process.env.API_HOST來(lái)使用地址如

instance.post(process.env.API_HOST+'user/login', this.form)

然后第二步后端服務(wù)器配置一下cros跨域即可,就是access-control-allow-origin:*允許所有訪問(wèn)的意思。綜上:開發(fā)的環(huán)境下我們前端可以自己配置個(gè)proxy代理就能跨域了,真正的生產(chǎn)環(huán)境下還需要后端的配合的。某大神說(shuō):此方法ie9及以下不好使,如果需要兼容,最好的辦法是后端在服務(wù)器端口加個(gè)代理,效果類似開發(fā)時(shí)webpack的代理。

第四步:

<template>
<div>
  <ul>
    <li v-for="item in movieArr">
      <span>{{item.title}}</span>
    </li>
  </ul>
  <button @click="sayOut">渲染</button>
</div>
</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 // 這里要強(qiáng)調(diào)一下這個(gè)this 箭頭函數(shù)指的是它的父級(jí)也就是vue實(shí)例 然后不用箭頭函數(shù)的話 this是一個(gè)undefined 無(wú)法.movieArr來(lái)給他賦值 這里要注意一下 我被坑了半天 希望小伙伴不要被坑
    })
   }
 }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

以上這篇vue2.0 axios跨域并渲染的問(wèn)題解決方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI