Vue.js的文档提到了智能自动更改跟踪 普通的Javascript对象:
当您将纯JavaScript对象作为其数据选项传递给Vue实例时,Vue.js将遍历其所有属性并使用Object.defineProperty将它们转换为getter / setter。
自Javascript以来 Map
和 Set
数据类型旨在与其内置使用 get
/set
方法,我如何让Vue跟踪内部状态的调用(因此,更改) Map
s和 Set
S'
Vue.js的文档提到了智能自动更改跟踪 普通的Javascript对象:
当您将纯JavaScript对象作为其数据选项传递给Vue实例时,Vue.js将遍历其所有属性并使用Object.defineProperty将它们转换为getter / setter。
自Javascript以来 Map
和 Set
数据类型旨在与其内置使用 get
/set
方法,我如何让Vue跟踪内部状态的调用(因此,更改) Map
s和 Set
S'
Vue.js不支持反应 Map
和 Set
数据类型(还是?)。
该 功能票 有一些讨论和这个工作(由用户“inca”):
Vue无法观察到集合和贴图。为了使用那些 - 无论是在...
v-for
,或计算属性,方法,观察者, 模板表达式等 - 您需要创建一个可序列化的副本 这个结构并将其暴露给Vue。这是一个天真的例子 使用一个简单的计数器为Vue提供信息Set
是 更新:data() { mySetChangeTracker: 1, mySet: new Set(), }, computed: { mySetAsList() { // By using `mySetChangeTracker` we tell Vue that this property depends on it, // so it gets re-evaluated whenever `mySetChangeTracker` changes return this.mySetChangeTracker && Array.from(this.mySet); }, }, methods: { add(item) { this.mySet.add(item); // Trigger Vue updates this.mySetChangeTracker += 1; } }
这说明了一种有点hacky但100%工作的制作方法 不可观察的数据反应。不过,在现实世界的情况下,我最终了 使用集合/地图的序列化版本(例如,您可能想要 在localstorage中存储集合/映射的修改版本 无论如何序列化它们,所以不涉及人工计数器/黑客。