【发布时间】:2021-01-02 16:25:35
【问题描述】:
我有两个组件“父”和“子”。每个子组件都有带有 :checked 属性的复选框。在父组件中,我遍历对象数组并将道具传递给子组件。我可以将事件从子级发送回父级并在数组中重新分配新值,我看到更改但组件不会重新渲染。
我想要做的是获得某种无线电组行为,但在复选框内。单击一个复选框时,需要将其他复选框设置为 false。我可以清楚地看到数组已被修改,但组件不会重新渲染(
这里是沙盒链接 https://codesandbox.io/s/vue-starter-forked-jxgf9?fontsize=14&hidenavigation=1&theme=dark
父组件:
<template>
<div>
<Child
v-for="l in list"
:id="l.id"
:key="l.id"
:title="l.title"
:checked="l.checked"
@checked="handleUpdate"
/>
</div>
</template>
<script>
import Child from "../components/Child.vue";
export default {
name: "parent",
components: {
Child
},
data: () => ({
list: [
{ title: "First", checked: false, id: "01" },
{ title: "Second", checked: false, id: "02" },
{ title: "Third", checked: false, id: "03" },
{ title: "Fourth", checked: false, id: "04" },
{ title: "Fifth", checked: false, id: "05" }
]
}),
methods: {
handleUpdate(e) {
const newArray = this.list.map(a => ({ ...a }));
console.log(newArray);
newArray.forEach(el => {
if (el.id === e) {
el.checked = true;
} else {
el.checked = false;
}
});
this.list = [];
this.list = newArray;
}
}
};
</script>
子组件:
<template>
<div>
<h1>{{ title }}</h1>
<input type="checkbox" :value="checked" @click="$emit('checked', id)">
</div>
</template>
<script>
export default {
name: "child",
props: {
title: {
type: String,
required: true
},
checked: {
type: Boolean,
required: true
},
id: {
type: String,
required: true
}
}
};
</script>
非常感谢任何帮助。我真的坚持这一点,我压力很大(
【问题讨论】:
标签: javascript vue.js checkbox nested-loops v-for