vuejs2.0 提示Cannot read property 'push' of undefined

放牛极客
  • 80

new Vue({

            el: '#swiperBanner',
            data: {
                slideList : []
            },
            created: function () {
                this.getSlider();
            },
            methods: {
                getSlider : function () {
                    $.getJSON(basePath+'slider/index.html',{'id':13}, this.getData);
                },
                getData : function (data) {
                    if(data.code==1){
                        if(!common.isNullOrEmpty(data.info.list)){
                            console.log(this.slideList);
                            $.each(data.info.list, function(i,item){
                                this.slideList.push(item);
                            });
                            //this.slideList = data.info.list;
                        }
                    }
                }
            },
            updated: function () {
                new Swiper('.swiper-banner', {
                    pagination: '.swiper-pagination',
                    paginationClickable: true
                });
            }
        });
        

这是一段正常的读取数据的代码,为什么在填充数据的时候会提示Cannot read property 'push' of undefined,为什么没有push属性呢?

回复
阅读 22.9k
3 个回答

this指向的问题,你在each的函数里面,当前的this并不是指向的vue的,所以没有找到slideList这个变量,自然就没有push这个属性了

getData : function (data) {
    var _this = this;
    if(data.code==1){
        if(!common.isNullOrEmpty(data.info.list)){
            console.log(this.slideList);
            $.each(data.info.list, function(i,item){
                _this.slideList.push(item);
            });
            //this.slideList = data.info.list;
        }
    }
}
data () {
  return {
    slideList : []
  }
}

这样写 data

很明显 this指向错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏