watch属性是不监听array内元素的变化的吗

来源:2-9 数据,方法,计算属性和侦听器(2)

陈加州

2021-12-26

我想知道watch能不能监听list元素的变化。
于是首先在data里定义了item_count,然后在watch属性里写了list的监听函数, 但是发现在执行list.push(1)的时候,watch下的list(){}函数里的内容并没有被执行,但发现如果vm.$data.list=[1,2,3]的话list()是会自动执行并且更新item_count的。
另一边如果去掉data下的item_count, 用computed的话,是可以监听list.push(1), splice()之类导致的array元素的改变的。
这是因为watch监听的只是变量的值吗?如果是的话有点好奇那computed是怎么实现监听list元素删减的(template有点长我省去了,我在template里面写了{{item_count}})

data: () => ({
            list: [],
            // item_count: 0,
        }),
computed:{
            item_count(){
                return this.list.length 
            }
        },
/**watch:{
            list(){
            console.log(this.list.length)
            this.item_count = this.list.length
            },
        }, */
写回答

1回答

Dell

2021-12-26

list 你不是 reactive 数组,watch 你这么写,没法舰艇,价格 reactive([]),马上就好了

0
1
陈加州
谢谢指点!在官方文档里讲reactivity的地方找到了
2021-12-26
共1条回复

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3394 学习 · 1468 问题

查看课程