2

我有一个指令,它本质上是一个复杂的标签标签,它包含一个输入元素并将输入框的 ng-model 作为参数。

<div switch model="testObject.switch">
    <input type="checkbox" ng-model="$parent.testObject.switch">
</div>

在升级到 Angular 1.4 之前,点击指令会更新 ng-model 并触发指令内的 watch。

现在,点击指令仍然会影响输入框,但指令内的值不受影响。

我希望能深入了解导致这种变化的原因以及如何解决它。

小提琴

4

1 回答 1

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/

于 2015-07-13T21:22:40.527 回答