zoukankan      html  css  js  c++  java
  • 在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

     

  • 相关阅读:
    JUnit测试框架使用
    Android开发环境搭建与SD card
    深入Java泛型(Java泛型擦除机制,使用泛型强转时机,擦除对复写影响,协变返回类型)
    DHTML5(控件动态效果综合应用与表单校验)
    DHTML4(select与checkbox应用)
    DHTML3(表格动态创建,删除行/列,表格行排序,行颜色交替高亮显示)
    DHTML2(window对象,下拉列表)
    DHTML1(节点操作)
    JavaScript_语法,语句,函数,对象
    Html/CSS2_了解CSS
  • 原文地址:https://www.cnblogs.com/lonecry/p/9261885.html
Copyright © 2011-2022 走看看