首頁  >  文章  >  web前端  >  vue2.0 axios跨域並渲染的問題解決方法

vue2.0 axios跨域並渲染的問題解決方法

亚连
亚连原創
2018-05-31 16:36:201725瀏覽

下面我就為大家分享一篇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(&#39;/api/v2/movie/top250&#39;)
    .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>

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

layui之select的option疊加問題的解決方法

Vue.js自訂事件的表單輸入元件方法

vue註冊元件的幾種方式總結

以上是vue2.0 axios跨域並渲染的問題解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn