javascript - V-model 不会在复选框列表更改时更新
问题描述
我有一个v-for
在组件上使用 a 呈现的复选框列表。选中后,复选框会用当前选中的复选框填充数组。当一个或多个选中的复选框被删除时,问题就出现了 -v-model
仍然计算已删除的复选框。v-model
当我的阵列更新时,如何更新?我尝试强制重新渲染解决问题的整个组件,但这不是我需要的解决方案。
<div v-for="player in players" :key="player.id">
<input
v-model="selectedPlayers"
:value="player.id"
type="checkbox"
:id="player.id"
/>
<label :for="player.id">
{{ player.name }}
</label>
</div>
问题
期望的结果
解决方案
所以据我了解,你有这个player2
数组,你需要比较。数组中的任何内容都players2
必须存在于selectedPlayers
数组中。为此,只需使用 use map
array 函数迭代players2
数组以仅返回ids
玩家的 ,然后将它们存储在选定的玩家数组中,这是一个反应性属性将自动修补DOM
. 绝对不需要重新渲染组件。
Vue.config.productionTip = false;
Vue.config.devtools = false;
new Vue({
el: "#app",
data() {
return {
selectedPlayers: [],
players: [
{name: "Arnold",id: "1"},
{name: "Rambo",id: 2},
{name: "Terminator",id: 3},
{name: "Titan",id: 4},
{name: "Odin",id: 5},
],
players2: [
{name: "Titan",id: 4},
{name: "Odin",id: 5},
],
};
},
methods: {
clicked() {
this.players = this.players2;
this.selectedPlayers = this.players2.map(p => p.id);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
If you check all checkboxes and press the button, the array still contains all elements
<div v-for="player in players" :key="player.id">
<input v-model="selectedPlayers" :key="players.length" :value="player.id" type="checkbox" :id="player.id" />
<label :for="player.id">
{{ player.name }}
</label>
</div>
{{ selectedPlayers }}
<button @click="clicked">Press me</button>
</div>
推荐阅读
- spring - Spring Data Rest 自定义参数解析器
- c# - 公共静态 DateTime 字段是一种反模式还是一种好的做法?
- amazon-web-services - 设计带有标签的相册的最佳实践
- python - 在某些元素处打破循环
- python - 抓取具有多个属性的标签
- apache-spark - json/文本格式的 Apache Spark DAG 可视化
- sql - 使用变量 sql 作为列名
- javascript - VueJs 2:将选定的子复选框与父级映射
- google-app-engine - 无法赋值'
' 属性 'XXX' - java - 未处理 Google PubSub 重新发送的消息