javascript - Vue deep watch 无法处理对象属性更改
问题描述
我有一个customer
对象作为我的初始数据。我有文本字段,当有人开始输入时,它会向对象添加不同的键。添加新key
的时,观察者会正确触发,但如果键是从现有值编辑的,则不会。
因此,如果我输入街道地址,key
street_address1
则会将其添加到customer
对象中,以便观察者触发。如果我开始编辑街道地址,它就不会再触发了。
模板
<v-container>
<v-col cols="12">
<h2>Contact</h2>
<div>Email Adderss</div>
<v-text-field
outlined
v-model="customer.email"
>
</v-text-field>
</v-col>
<v-col cols="12">
<v-row>
<v-col cols="6">
<div>First</div>
<v-text-field
outlined
v-model="customer.first"
>
</v-text-field>
</v-col>
<v-col cols="6">
<div>Lasts</div>
<v-text-field
outlined
v-model="customer.last"
>
</v-text-field>
</v-col>
</v-row>
</v-col>
<v-col cols="12">
<div>Shipping Address Line 1</div>
<v-text-field
outlined
v-model="customer.street_1"
>
</v-text-field>
</v-col>
<v-col cols="12">
<div>Shipping Address Line 2</div>
<v-text-field
outlined
v-model="customer.street_2"
>
</v-text-field>
</v-col>
</v-container>
脚本
data() {
return {
customer: {}
};
},
watch: {
customer(newData) {
console.log("test", newData)
},
deep: true
},
解决方案
这是一个语法问题。该deep
属性未注册,因为它错误地位于手表之外,就好像它是第二块手表一样。
customer
对手表使用对象语法。该对象应具有两个属性:
- 一种
handler
方法(必须命名为“处理程序”,如watch
文档中所示) deep
财产_
watch: {
customer: {
handler (newData) {
console.log("test", newData)
},
deep: true
}
}
如果您希望在首次创建组件时运行它,它也可以有一个immediate: true
属性。watch
推荐阅读
- javascript - 在每个请求中加倍功能
- flutter - 使用 VS Code 进行编码,但我无法在真实设备(手机)中模拟颤振应用程序
- sas - 如何将数据添加到不同组的 SAS 表中?
- android - __strlen_chk 何时调用?
- c# - 如何获取当前应用程序目录中的文件名?
- reactjs - 如何扩展导入的组件样式组件
- regex - Logstash 正则表达式匹配所有没有一定数量分隔符的消息
- c - CS50 Caesar 程序正在运行,但 check50 说它不是
- elasticsearch - 合并多个聚合的结果
- sql - 我想使用 oracle apex 将我的电子邮件日志保存到我的个人表中