现在有个父组件和子组件需要双向绑定一个数组,但是父组件只需要用到数组元素的id,子组件用到数组元素的id和type等属性信息,我用下面两个测试组件来模拟,这样写会死循环,有没有什么解决方法?
- 父组件
<template>
<div>
root_data:{{ data }}
<test-child :data="data" @change="data = $event"></test-child>
<el-button type="primary" @click.native="test">test</el-button>
</div>
</template>
<script>
import TestChild from "@/views/FormConfig/TestChild";
export default {
components: {
TestChild
},
data() {
return {
data: []
};
},
methods: {
test() {
this.data = [1, 2, 3];
}
}
};
</script>
- 子组件
<template>
<div>
{{ data }}
</div>
</template>
<script>
export default {
props: ["data"],
data() {
return {
mydata: []
};
},
watch: {
data: {
handler(val) {
let mydata = [];
for (let i = 0; i < val.length; i++) {
mydata.push({ id: val[i], type: "int" });
}
this.mydata = mydata;
},
immediate: true,
deep: true
},
mydata: {
handler(val) {
let result = [];
for (let i = 0; i < val.length; i++) {
result.push(val[i].id);
}
console.log("emitchange result", result);
this.$emit("change", result);
},
deep: true
}
}
};
</script>
已经解决了,通过
JSON.stringify
将两个对象转成字符串对比是否一样,从而决定是否更新。