当前位置: 首页 > 知识库问答 >
问题:

vue.js - vue中watch执行先于computed,在watch中有调用computed后的对象,该怎么改呢?

楚流觞
2023-11-03

比如,我切换图片时,触发以下method:

setActiveImage(image) {    for (const imageItem of this.imageList) {        imageItem.active = false;    }    image.active = true;    // 此处修改了watch的值    this.test = "xxx";}

这里自动切换到当前图片对象

computed: {    activeImage() {        return this.imageList.find((image) => {            return image.active;        });    },}

最后在watch时使用到了computed后的对象,但是computed是在watch之后执行的,activeImage数据就不对,有没有什么办法解决?

watch: {    "test": {        handler() {            // 这里使用到了computed后的对象,这里的数据不正确            this.dosomething(this.activeImage);        },        deep: true    }}

共有1个答案

梁丘书
2023-11-03

Vue.set :

setActiveImage(image) {    this.imageList.forEach((imageItem, index) => {        this.$set(this.imageList, index, { ...imageItem, active: false });    });    this.$set(this.imageList, this.imageList.indexOf(image), { ...image, active: true });}

或者直接调用:

setActiveImage(image) {    for (const imageItem of this.imageList) {        imageItem.active = false;    }    image.active = true;        // 在这里直接调用    this.$nextTick(() => {        this.dosomething(this.activeImage);    });}setActiveImage(image) {    for (const imageItem of this.imageList) {        imageItem.active = false;    }    image.active = true;        // 在这里直接调用    this.$nextTick(() => {        this.dosomething(this.activeImage);    });}
 类似资料:
  • 本文向大家介绍Vue.js计算属性computed与watch(5),包括了Vue.js计算属性computed与watch(5)的使用技巧和注意事项,需要的朋友参考一下 在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式的逻辑,应当

  • 场景是这样的,一张新建/编辑页,编辑页的数据是接口获取的。页面里的表单元素里有一些复杂的计算逻辑,请问: 1.计算逻辑是写在methods里,然后表单元素change或者input的时候调用它,还是直接写在computed里计算它? 2.我一开始是这么写的,computed计算出需要的结果a,b,c,d(且这四个值又能通过表单元素被修改,如input)。然后watch监听a,b,c,d的变化,赋值

  • 本文向大家介绍在vue中watch和created哪个先执行?为什么?相关面试题,主要包含被问及在vue中watch和created哪个先执行?为什么?时的应答技巧和注意事项,需要的朋友参考一下 在vue中watch和created哪个先执行?为什么?

  • 本文向大家介绍Vue.js每天必学之计算属性computed与$watch,包括了Vue.js每天必学之计算属性computed与$watch的使用技巧和注意事项,需要的朋友参考一下 在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式

  • 我对非常陌生,并试图弄清楚为什么我的Watch在作为对象访问时没有触发。我看到了这条线索,但我不清楚我的问题是否相同。以下是我简化的例子(完整的例子得到了更多的属性和数组属性 JS 链接到JSFIDLE

  • < code>things是一个对象数组< code>[{foo:1},{foo:2}] 检测对象何时添加或删除,但不检测对象上的值何时更改。我该怎么做?