棱角多复选框 全选
angular-formly multiCheckbox Select All
我有一个角度形式的多选字段,具有以下选项:
vm.fields = [
{
key: 'fruits',
type: 'multiCheckbox',
className: 'multi-check',
templateOptions: {
label: 'Fruits:',
options: [
{
"name": "ALL",
"value":"ALL"
},
{
"name": "apple",
"value":"apple"
},
{
"name": "orange",
"value":"orange"
},
{
"name": "pear",
"value":"pear"
},
{
"name": "blueberry",
"value":"blueberry"
},
],
},
},
];
当我选择/取消选择"全部"时,我希望选择/取消选择所有选项。例如。如果选中 ALL,则还应检查所有水果选项(苹果、橙子、梨、蓝莓)
如果我取消选择全部,则不应检查任何水果选项。
如何以角度形式启用此行为?
这是jsbin的链接:https://jsbin.com/xololi/edit?html,js,output
我在这里写了一个工作示例 https://jsbin.com/dukewac/6/edit?js,output
模板选项的签名.on单击当函数$modelValue, fieldOptions, scope, event
. 当 ngModelAttrsTemplateManipulator 运行时,会发生这种情况。 我在函数中利用了这些变量。
其中一些有点笨拙,但这部分与角度实现复选框的方式以及角度形式模板引导中的多复选框类型采用的解决方法有关。
陷阱
嵌套键
此示例不适用于嵌套键,但如果更新了多重复选框类型,则应该使用。这是因为它使用数组访问符号直接访问模型 [请参阅此处的代码] (https://github.com/formly-js/angular-formly-templates-bootstrap/blob/a69d69e5c3f6382ea6a6c028c1d8bf76a9b94db3/src/types/multiCheckbox.js)。
硬编码的"全部"选项
该代码还假定"ALL"选项是列表中的第一个选项,并且其值为"ALL"。 可以通过添加一个 templateOption 属性来解决此问题,该属性引用所有功能的索引和值。
模型包含"全部"
"ALL"将显示在您的模型中。 解决此问题的一种可能方法是为其定义一个$parser。
不支持templateOptions.valueProp
templateOptions.valueProp
不考虑在内,但添加起来应该不会太难。
您是否有任何解决方案如何将默认值添加到多复选框。我可以添加它并在模型中查看它,但在视图 (html) 上它没有显示。我们在 jsbin 上做了一个例子,我有所有类型的字段和多复选框......JSBIN 示例谢谢。
这是另一个工作解决方案(实际上是更新的 ckniffty 代码),它将 ng-click 绑定到表单多复选框字段,然后在控制器中调用函数:
....
ngModelElAttrs: {
"ng-click": "update(this.option.value)"
},
controller: function ($scope) {
$scope.update = function (val) {
var all = 'ALL',
// field key
key = $scope.options.key,
// if true - current checkbox is selected, otherwise - unselected
selected = $scope.model[key].indexOf(val) !== -1,
// index of 'ALL' checkbox within model array
indexOfAll = $scope.model[key].indexOf(all);
// 'ALL' checkbox clicked
if (val === all) {
// on select - select all checkboxes, on unselect - unselect all checkboxes
$scope.options.value(selected ? $scope.to.options.map(function (option) {
return option.value;
}) : []);
}
// other then 'ALL' checkbox unselected, while 'ALL' is selected
else if (!selected && indexOfAll !== -1) {
// unselect 'ALL' checkbox
$scope.model[key].splice(indexOfAll, 1);
}
// all checkboxes selected except of 'ALL'
else if (selected && indexOfAll === -1 && $scope.model[key].length === $scope.to.options.length - 1) {
// select 'ALL' checkbox
$scope.model[key].push(all);
}
};
}
.....
普伦克:https://plnkr.co/edit/LWRZSS6HuBmrzSG5fsH9
- 无法限制所选复选框的数量(尝试了多个代码段)
- Javascript全选复选框突然不起作用
- 用于“全选”复选框的脚本在WordPress页面上不起作用
- “全选”复选框在 Internet Explorer 9 上不起作用
- 如何在 JSF 中创建有效的“全选”复选框
- 添加全选复选框
- 如何在取消选中几个复选框后使“全选”复选框可用
- 如何使我的全选复选框忽略禁用的项目
- 更新全选/取消全选复选框
- 如何防止点击“全选”复选框影响标题和列排序
- 勾选复选框全选,并刷新数据表
- 用javascript在JSP中实现一个全选复选框
- 敲除js按钮点击全选复选框
- 取消选中全选复选框
- 使用.prop()创建一个全选复选框,但不希望删除该复选框
- 使用jquery动态添加复选框(当用户点击全选复选框时显示选中)
- 将“全选”复选框添加到更新对象数组的复选框列表中
- 为什么当我单击“全选”复选框时计数错误
- 挖空.js“全选”复选框
- 如何设置全选复选框?不使用按钮“播放(循环)”