我有一个指令,它本质上是一个复杂的标签标签,它转换输入元素并将输入框的ng-model作为参数。
<div switch model="testObject.switch">
<input type="checkbox" ng-model="$parent.testObject.switch">
</div>
在升级到角度1.4之前,点击指令更新ng-model并在指令内触发监视。
现在,单击该指令仍会影响输入框,但指令内的值不受影响。
我很感激能够深入了解导致此更改的原因以及如何解决此问题。
答案 0 :(得分:0)
我已经用工作代码更新了你的小提琴。如果您在指令中需要ngModel并观察其$ modelValue,则可以获得您正在寻找的行为。
HTML:
<div switch ng-model="testObject.switch">
指令:
booleanSwitchModule.directive('switch', [function () {
return {
scope: {},
require: "?^ngModel",
link: function (scope, elem, attr, ngModel) {
var timesChanged = 0;
scope.$watch(function() {return ngModel.$modelValue; }, function (val) {
if (val != undefined) {
alert("model changed " + ++timesChanged + " times");
scope.switchPosition = scope.model;
}
});
},
restrict: 'EA',
replace: true,
transclude: true,
template: '<label class="switch">' +
'directive scope model: {{ngModel}}' +
'<span ng-transclude></span>' +
'</label>',
}
}]);
这是更新的小提琴:https://jsfiddle.net/62911kx5/3/