vue.js - 如何确保使用 vuejs 至少选中一个复选框
问题描述
我想保证至少有一个复选框被选中并且价格计算正确。
https://jsfiddle.net/snoke/1xrzy57u/1/
methods: {
calc: function (item) {
item.isChecked = !item.isChecked
this.total = 0;
for (i = 0; i < this.items.length; i++) {
if(this.items[i].isChecked === true) {
this.total += this.items[i].price;
}
}
// fullPackagePrice
if(this.items[0].isChecked === true && this.items[1].isChecked === true && this.items[2].isChecked === true) {
this.total = this.fullPackagePrice;
}
// Trying to guarantee that have at least one checkbox checked
if(this.items[0].isChecked === false && this.items[1].isChecked === false && this.items[2].isChecked === false) {
this.total = this.items[0].price;
this.items[0].isChecked = true;
}
}
}
解决方案
一个很好的方法是使用计算属性而不是方法。
在此处阅读有关这些的更多信息:https ://vuejs.org/v2/guide/computed.html#Computed-Properties
计算属性观察所有引用的数据,当其中一个发生变化时,该函数将重新运行并重新评估。
你可以做的是首先创建一个allowCheckout
这样的计算属性:
allowCheckout() {
return this.items[0].isChecked || this.items[1].isChecked || this.items[2].isChecked;
}
然后,您将在按钮中使用它,如下所示:
<button :disabled="allowCheckout"...
当没有检查任何项目时,这将禁用该按钮。
接下来,您还需要为总价创建第二个计算属性
totalPrice() {
// Perform similar checking here to update this.total
}
最后,您需要将复选框更改为不再使用 v-on:change 而是使用 v-model 来代替每个复选框的相关参数。
这样,您的复选框状态将绑定到变量的真/假。
推荐阅读
- http-headers - 通过 HTTP 标头传递 cookie?
- google-sheets - 如何使谷歌表单响应提交到电子表格底部而不忽略电子表格中手动输入的数据
- date - 按年份在同一散点图上绘制两条回归线:X 轴日期 MM/DD
- javascript - 从 3D 数组中检索值
- java - 实体管理器在尝试使用 JPA 连接到 Java 中的 Dockerised DB2 时为空,也使用 maven 和 Open Liberty
- javascript - 是否有特定的方法可以路由到 GitHub Pages 站点上的不同页面?
- linux - 在 unix 中重新编码列值
- python - 在文件中搜索特定信息
- html - 如何使按钮元素内的css动画更小?
- linux - 如何将多个数据附加到文件中?