首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用表中存储模式

使用表中存储模式
EN

Stack Overflow用户
提问于 2016-07-13 07:07:28
回答 3查看 1.7K关注 0票数 0

下面是我想做的事情:我有一个组件,它的一个数据是从一个共享对象中读取的,每次值发生变化时,我都想知道并做些什么。所以我决定用手表来观察那块房子。下面是我的代码:

代码语言:javascript
运行
复制
export default {                                          
data: function () {
  return {
    index: sharedData
  }
}, 
watch: {
  'index': function (val) {
       doSmething()
  }
} 
}

我的sharedData非常简单,只是为了演示:

代码语言:javascript
运行
复制
let shatedData = {                                         
  testIndex: 0
}

正如指南所述,sharedData是一个对象。但是问题来了:这个组件中的sharedData更改,或者其他组件中的事件,可以在index属性中正确地显示,但是watch函数从未被触发(也许我在监听一个对象更改,但它的结构仍然相同)。那么,我如何才能让这个组件知道一个特定的共享数据更改了呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-13 14:11:13

我在forum.vuejs.org上发布了同样的问题,并在那里得到了答案,所以我在这里为可能有相同问题的任何人添加了这个答案的链接。http://forum.vuejs.org/topic/4605/use-watch-in-store-pattern/3

票数 0
EN

Stack Overflow用户

发布于 2016-07-13 07:37:09

对于我的问题,我有一个难看的解决方案:添加一个计算属性来侦听该共享对象中的确切属性。

代码语言:javascript
运行
复制
computed: {                                                  
  compIndex: function () {
    console.log(`caught in computed value`)
    doSomething()
    return this.index.data
  }
},

此计算属性必须存储在隐藏元素中,以便可以调用doSomething。有更好的主意吗?

票数 0
EN

Stack Overflow用户

发布于 2017-03-18 19:18:19

答案@ericchan1336在Vue论坛上复制,以供参考:

因为索引属性本身从未改变-它总是包含相同的对象,只有该对象中的属性会发生变化,因此永远不会触发watch函数。

对于这些情况,有deep: true选项,它使手表检查嵌套在监视属性中的深度更改:

代码语言:javascript
运行
复制
watch: {
  'index': {
    deep: true,
    handler: function (val) {
       doSmething()
     }
   }
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38344827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档