在vuejs 中使用axios不能获取属性data的解决方法


 

 vuejs和axios使用钩子mounted不能获取属性data的解决方法

 

data(){ return { followed : false, } },

axios请求数据:

 // mounted 方法为钩子,在Vue实例化后自动调用
 mounted() { axios.post('/api/question/follower', { 'question':this.question, 'user':this.user }).then(function(response){ // console.log(response.data);
           this.followed = response.data.followed; }) },

出错问题:
then 这个里边的赋值方法this.followed = response.data.followed会出现报错,什么原因呢?在Google上查了下,原来是在 then的内部不能使用Vue的实例化的this, 因为在内部 this 没有被绑定。
可以看下 Stackoverflow 的解释:

 

In option functions like data and created, vue binds this to the view-model instance for us,
so we can use this.followed, but in the function inside then, this is not bound.

 

解决方法:

 created() { var self = this; axios.post('/api/question/follower', { 'question':this.question, 'user':this.user }).then(function(response){ // console.log(response.data);
          self.followed = response.data.followed; }) },

 

或者我们可以使用 ES6 的 箭头函数arrow function,箭头方法可以和父方法共享变量 :

 

 created() { axios.post('/api/question/follower', { 'question':this.question, 'user':this.user }).then((response) => { this.followed = response.data.followed; }) },

完整代码:

<script> export default { // 为父组件传递到子组件的属性值,子组件使用props方法接收
    props:['question', 'user'], // mounted 方法为钩子,在Vue实例化后自动调用
 mounted() {  axios.post('/api/question/follower', { 'question':this.question, 'user':this.user }).then(function(response){ // console.log(response.data);
           this.followed = response.data.followed; }) }, data(){ return { followed : false, } }, computed:{ text(){ return this.followed ? '已关注' : '关注该问题'; } }, methods:{ // 关注动作
 follow(){ axios.post('/api/question/follow', { 'question':this.question, 'user':this.user }).then(function(response){ this.followed = response.data.followed; }) } } } </script>

参考文章:
Stackoverflow:Axios can't set data

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM