私の問題は、角度ディレクティブの作成にあります。
1つのng-modelだけでチェックボックスのグループを作成したいと思います。これはビットフィールドやフラグのようなものです。つまり、チェックボックスの値は0、1、2、3からnまでですが、ng-modelの場合は、チェックされているすべてのチェックボックスの2^値を追加するだけです。追加する値は、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);
});
});
}
}
};
});
事前にthnxknut