Transcluded输入ng-model不会更新传递给指令的范围变量

时间:2015-07-13 20:35:28

标签: angularjs angularjs-directive angularjs-ng-transclude

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

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

在升级到角度1.4之前,点击指令更新ng-model并在指令内触发监视。

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

我很感激能够深入了解导致此更改的原因以及如何解决此问题。

fiddle

1 个答案:

答案 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/