修改对象时 Vue.js watch 不触发

标签 vue.js

在 Vue.js 中,我有三个模板,它们应该协同工作以触发新结果的加载。我的容器模板是一个通用模板,包含过滤器和结果模板。 当过滤器模板中的对象发生更改时,我在使 watch() 触发结果模板中的更改时遇到一些困难。流程非常简单。这是我目前所拥有的以及流程的工作原理:

过滤器模板:单击时,我的对象属性将更新为新值,并将此更改发送到容器模板。

<span v-on:click='setClient(client.ccid)'>{{client.name}}</span>
data: function() {
    return {
        formData: {
            perPage: 15,
            clientId: null
        }
    }
}

setClient: function(clientId){
  this.formData.clientId = clientId;
  this.$emit('filters-update', this.formData);
}

容器模板: - 它的作用只是保存过滤器和结果模板并将修改后的对象传递到结果模板。

<template>
   <div class="row">
     <filters v-on:filters-update="filtersUpdate"></filters>
     <results :filters='filters'></results>
   </div>
</template>

<script>
export default {
    data: function() {
       return  {
          filters: {}
       }
    },

    methods: {
        filtersUpdate: function(params){
            this.filters = params;
        }
    }
}
</script>

结果模板:

export default {
  props: {
    filters: {
        type: Object
    },
  }
}

watch: {
  filters: function(){
    console.log("loading new results..");
    this.loadData();
  }
}

最佳答案

显然,要监视对象属性的变化,您需要深度监视 https://v2.vuejs.org/v2/api/#watch

watch: {
    filters: {
        deep: true,
        handler(){
            this.loadData();
        }
    }
}

关于修改对象时 Vue.js watch 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378814/

相关文章:

mysql - 为什么我无法通过Vue从mysql获取新页面的数据?

javascript - VueJS 和 tinyMCE,自定义指令

javascript - 隐藏并显示引导面板后,Vue.js 表单提交不起作用

javascript - Vue.js 动态 &lt;style&gt; + 变量

vue.js - Vue scss 样式加载失败,mocamapck

javascript - iView UI 下拉项单击

ios - 键盘将整个内容推到黑色背景(cordova+framework7+vue)

javascript - 如何在 Vue.js 或 Nuxt.js 中的 First Contentful Paint 或第一个元素之后加载组件?

webpack - 如何生成正确的 dist 文件?

javascript - 如何在 vue.js 中使用 onfocusout 函数?