Geo*_*bol 4 checkbox vue.js vuejs2 v-model
我希望始终至少选中一个复选框,但我混合了v-model和的概念:checked。
该文档说:
v-model将忽略在任何表单元素上找到的初始value,checked或selected属性。它将始终将 Vue 实例数据视为真实来源。
我可以阻止我的模型被修改,但我不能阻止复选框被选中......
一些代码:
模板
<div class="wrapper" v-for="(s, id) in userOutputSeries" :key="id">
<input type="checkbox" :id="id" :value="id" @change="preventIfLessThanOneChecked" :checked="s.active">
<label :for="id">{{ s.display }}</label>
</div>
Run Code Online (Sandbox Code Playgroud)
该模型 userOutputSeries
data () {
return {
userOutputSeries: {
foo: {
display: 'Awesome Foo',
active: true
},
bar: {
display: 'My Bar',
active: false
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该preventIfLessThanOneChecked处理器
preventIfLessThanOneChecked (event) {
// I don't update the model so it stay at the same state
// But only need to count the active series and do what we want.
console.log(event.target.value, event.target.checked)
}
Run Code Online (Sandbox Code Playgroud)
任何阻止本机复选框传播的想法?
您应该使用v-model代替,:checked以便对userOutputSeries数据属性的更改将反映在复选框输入中。
然后,将s引用从传递v-for到方法并将该对象的active属性设置为true如果没有active复选框:
new Vue({
el: '#app',
data() {
return {
userOutputSeries: {
foo: {
display: 'Awesome Foo',
active: true
},
bar: {
display: 'My Bar',
active: false
}
}
}
},
methods: {
preventIfLessThanOneChecked(item) {
if (item.active) {
return;
}
let items = Object.values(this.userOutputSeries);
if (!items.find(i => i.active)) {
item.active = true;
}
}
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.min.js"></script>
<div id="app">
<div class="wrapper" v-for="(s, id) in userOutputSeries" :key="id">
<input type="checkbox" :id="id" :value="id" @change="preventIfLessThanOneChecked(s)" v-model="s.active">
<label :for="id">{{ s.display }}</label>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7964 次 |
| 最近记录: |