vue created里新添加的属性,视图不会更新

li元素的marginTop没有变化,而如果改变的是name,li元素一直变化,
为什么noticeDatad在created里新添加的属性无效呢?

<ul v-for="(item,index) in noticeData">
    <li :style="{marginTop: item.marginTop + 'px'}">{{ item.name }}</li>
</ul>
 
new Vue({
    el: '#app',
    data: {
        noticeData: [{
            id: 1,
            name: '国庆大促销!全场5折'
        }, {
            id: 2,
            name: '国庆大促销!全场8折'
        }, {
            id: 3,
            name:' 国庆大促销!全场20折'
        }],
    },
    created: function() {
        var self = this;
        self.noticeData.forEach(function(item){
            item.marginTop = 0;
        });
        self.$nextTick(function(){
            var i = 0;
            setInterval(function(){
                i += 2;
                self.noticeData[0].marginTop = -i;
                //self.noticeData[0].name= -i;
            },1000);
        });
    }
})
阅读 3.6k
2 个回答

是因为这段代码的问题

self.noticeData.forEach(function(item){
            item.marginTop = 0;
});

换成这样既可

self.noticeData.forEach(function(item, index){
    self.$set(self.noticeData[index], 'marginTop', 0);
});

具体可以看链接

Vue.set(self.noticeData[0], 'marginTop', -i);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题