我有一个组件,其中有一个location
对象为props
。我传入的参数是locations[index]
,它是locations
数组中的选定项。
但是,index
发生更改时,组件无法做出反应。如在演示中所见,单击按钮时JSON会发生更改,但是组件无法更新。
使组件具有反应性的最佳方法是什么?
答案 0 :(得分:2)
您的location
组件仅在province
挂钩中填充city
和mounted
数据属性。当location
道具更改时,mounted
钩子将不再被调用,因此您将拥有陈旧的数据。
改为使用计算属性:
computed: {
province() {
return this.location.province;
},
city() {
return this.location.city;
}
}
如果您确实确实要求province
和city
为数据属性(而非计算属性),那么您将需要观看location
道具来更新属性:
data() {
return {
province: null,
city: null
}
},
watch: {
location: {
immediate: true,
handler(loc) {
this.province = loc.province;
this.city = loc.city;
}
}
}
答案 1 :(得分:0)
道具 location
中的嵌套项目不会是响应式的,您需要使用类似 lodash deepClone 的东西:
<location :location.sync="_.deepClone(loc)"></location>
就是这样,不需要观察者或其他任何东西。