【发布时间】:2022-01-19 20:16:33
【问题描述】:
这是我的问题的最小示例。我试图在 SO 上找到类似的问题,但没有找到任何东西,如果它是重复的,请见谅。
App.vue
<template>
<div>
<SubComponent v-model="myValue" />
<SubComponent v-model="myClonedValue" />
</div>
</template>
<script>
import SubComponent from "./components/SubComponent";
export default {
components: { SubComponent },
data: function () {
return {
myValue: {
foo: 45,
bar: 38,
},
};
},
computed: {
myClonedValue: function () {
return { ...this.myValue };
},
},
watch: {
"myValue.foo": function (val, oldVal) {
console.log(val, oldVal);
},
/* This Doesn't work either
"myClonedValue.foo": function (val, oldVal) {
console.log(val, oldVal);
},
*/
myClonedValue: {
handler: function (val, oldVal) {
console.log(val, oldVal);
},
deep: true,
},
},
};
</script>
子组件
<template>
<input v-model="value.foo" type="text" />
</template>
<script>
export default {
name: "SubComponent",
props: {
msg: String,
value: Object,
},
};
</script>
问题
在我的主要用例中,我有一个对象,只有在确认更改后才想修改它。所以我用计算属性克隆它的值,出于某种原因,我需要观察一些值是否被修改。我的问题在这里,您可以在此 CodeSandBox 上在线查看 CodeSandBox project 一旦我克隆数据值,VueJS 就不会检测到任何变化。如果您更改我示例的第二个输入,则不会发生任何事情。
我该如何解决这个问题?
【问题讨论】:
-
观看:{ myValue: { handler: function(newValue) { console.log(newValue.foo) }, deep: true } }
标签: javascript vue.js