Vue.js关于深度反应性的文档提到
数据对象中必须存在一个属性,以便Vue转换该属性并使其具有反应性
(...)
您必须通过预先声明所有根级反应性数据属性来初始化Vue实例,即使只是使用空值
考虑这两个代码片段,其中标记
被定义为空对象,并在脚本过程中以两种不同的方式进行更新:
var vm = new Vue({
el: "#root",
data: {
tags: {}
}
});
vm.tags = {
hello: true,
world: true
};
html prettyprint-override"><script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.js"></script>
<div id="root">
{{tags}}
</div>
var vm = new Vue({
el: "#root",
data: {
tags: {}
}
});
vm.tags["hello"] = true
vm.tags["world"] = true
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.js"></script>
<div id="root">
{{tags}}
</div>
在第一种情况下,内容被正确更新,而在第二种情况下,内容没有被正确更新。
为什么会这样,尽管在这两种情况下标签
都是在VM实例化时声明的?
这是因为在第一种情况下,您正在<code>标签数据:{tags:{定义中,因此它们不是被动的。
留档中的更改检测警告部分涵盖了这一点,但与您的情况(嵌套属性情况)不完全相同。您必须像这样声明您的数据:
data: {
tags: {
hello: null,
world: null,
}
}
这并不是说标签
对象是声明的,而是当 Vue 实例化时,tags
对象的属性不存在。
在第二种情况下,您使用索引器将两个新属性添加到标记
对象。Vue无法检测到已添加这些属性。
这就是为什么<code>$set<code>方法存在的原因。向对象添加新属性时,需要通过$set
或Vue.set
添加它
Vue.set(vm.tags, 'hello', true)
或者,如果您在Vue方法中,
this.$set(this.tags, 'hello', true)
在第一种情况下,您将添加一个具有属性的完全不同的对象。在这种情况下,Vue知道这些属性,并在向数据添加新值时将它们转换为反应属性。
相反,如果您添加了一个新的空对象,然后添加了属性,则您将返回到与第二个示例相同的大小写中。
通常,您只想使用空属性初始化对象。
data: {
tags:{
hello: false,
world: false
}
}
在这种情况下,属性将被转换为反应属性,并且将检测到变化。
编辑
@WoJ用笔发表了一条评论,代码如下所示:
var vm = new Vue({
el: "#root",
data: {
posts: {},
tags: {}
}
});
vm.tags = {
hello: true,
world: true
};
vm.posts["bonjour"] = true
vm.posts["monde"] = true
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.min.js"></script>
<div id="root">
<!-- show all tags which are on -->
{{tags}}
{{posts}}
</div>
我在JS对象(不是数组)中有一个
上次分析了背后的一些原因,这次说说如何应对 首先这里默认没有任何挽回机会了,而不是你跪在女神面前大哭一场,或作出一哭二闹三上吊这种夸张的事情便可力挽狂澜的 如果你真做了,并且挽回了,那么请参考如何恋爱的番外,而非下文 对于个体而言,如何尽快走出困境,把损失降到最低,这是我们现在最为关心的 好,我们先来处理《黄帝内经》中着重强调的“治未病”阶段 首先,要正视自己的备胎身份 大多数人往往不愿意承认这个
问题内容: 我有一个像这样的JSON字符串: 我想将属性更新为,如果值为,并且值为。 我已经到了这一点,但是不确定如何进行: 我不知道怎么去的是一个孩子。 提前致谢。任何指针都很棒。 问题答案: 您可以使用属性作为键来访问对象: 对于您的示例,请尝试:
给出以下方法:
问题内容: 我想在Qml中显示一个矩形,并且想从我的python代码中更改矩形的属性(宽度,长度)。实际上,在python代码中有一个套接字连接,通过该套接字连接可以从另一台计算机接收width和length的值。简而言之:另一个用户应该能够实时调整此矩形。我知道如何在我的python文件中建立套接字连接,并使用PyQt5,我可以显示来自python的qml文件。 但是,我在通过python代码访
问题内容: 我有一个具有多个相关属性的类,例如: 如果我正常地制作一个对象,那没有问题, 我将得到2个列表,和。 现在,如果我想先创建一个空对象,并为其分配一个属性,则希望其他属性自动更新,例如 我想自动更新,也想自动更新(分配和自动更新)。这可能吗? Class 是否是正确的选择? 谢谢大家,但是所有其他答案让我完全不知所措。谁能提供一个完整的解决方案,让我可以学习编写自己的解决方案? 我想实现