checkbox - 带有子元素的 Angular 双向绑定(bind)

标签 checkbox angularjs model-binding angularjs-directive

我的问题是创建 Angular 指令。

我想用一个 ng-model 创建一组复选框。它就像一个位域或标志,即复选框的值从 0、1、2、3 到 n,但对于 ng-model,我只想为所有选中的复选框添加 2^value。然后要添加的值是 1、2、4、8、16 ...

我想知道是否有更好、更正确或更简单的解决方案来解决我的问题。

http://plnkr.co/edit/9h7EkEpDohXTniIDHdc5

在示例中,您可以更改文本框中的值,检查将被更新,但反之则不行。这有点疯狂,代码可以在我的开发机器上运行,但不能在 Plnkr 上运行!

app.directive('ngCheckboxFlags', function () {
return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, element, attrs, ctrls) {
        var flagSum;
        var checkboxes = [];

        // trigger changes of the ngModel
        scope.$watch(attrs.ngModel, function (value) {
            flagSum = value;
            for (var i = 0, ii = checkboxes.length; i < ii; ++i) {
                var checkbox = checkboxes[i];
                checkbox.checked = flagSum & (1<<checkbox.value);
            }
        });

        for (var i = 0, inputs = element.find('input[type=checkbox]'), ii = inputs.length; i < ii; ++i) 
        {
            var checkbox = inputs[i];
            checkboxes.push(checkbox);
            // trigger changes of HTML elements
            $(checkbox).bind('change', function () {
                flagSum = ctrls.$viewValue ^ (1<<this.value);
                console.log(flagSum);

                //ERROR: Change not happening, textbox shows old value
                scope.$apply(function () {
                    ctrls.$setViewValue(flagSum);
                });
            });
        }
    }
};
});

提前谢谢 克努特

最佳答案

不要将 ng-model 直接绑定(bind)到基本类型,而是使用对象:

$scope.sum = {
  ofCheckValues: 3
};

在 HTML 上:

ng-model="sum.ofCheckValues"

“只要你有 ng-model,就一定会有一个点在某处。如果你没有点,那你就做错了。”

plunker:http://plnkr.co/edit/NRAk3kyP1rdDmYrsz6ZL?p=preview

关于checkbox - 带有子元素的 Angular 双向绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133561/

相关文章:

checkbox - Angular 2 - 复选框 "checked"取决于函数而不是属性 biind

ember.js - Ember 复选框已连接

javascript - 如何使 Angular 仅显示可用的数据

html - FB Like 按钮只显示一次 - 在我的 AngularJS View 第一次加载时

c# - ASP.NET MVC 模型在表单元素名称中使用破折号进行绑定(bind)

php - 从javascript函数获取复选框的值属性

mysql - Node.js 复选框迭代

javascript - <ng-show> 在 Angular Materials 上隐藏时显示为文本

c# - MVC 3 不绑定(bind) nullable long

asp.net-mvc-3 - bindmodel vs createmodel asp mvc 3