0

カスタム ディレクティブがあります。

.directive('myDirective', function() {
  return {
      scope: {ngModel:'='},
      link: function(scope, element) {          
           element.bind("keyup", function(event) {
                  scope.ngModel=0;
                  scope.$apply();
            });          
      }
  }
});

これは計画どおりに機能し、キーアップ時に変数を 0 に設定しますが、入力自体の変更は反映されません。また、初期化されると、モデルの値は入力に含まれません。次に例を示します。

http://jsfiddle.net/prXm3/

私は何が欠けていますか?

4

1 に答える 1

1

ディレクティブは分離されたスコープを作成するため、データを入力するためにウォッチャーを配置する必要があります。

angular.module('test', []).directive('myDirective', function () {
    return {
        scope: {
            ngModel: '='
        },
        link: function (scope, element, attrs) {
            scope.$watch('ngModel', function (val) {
                element.val(scope.ngModel);
            });

            element.bind("keyup", function (event) {
                scope.ngModel = 0;
                scope.$apply();
                element.val(0); //set the value in the dom as well.
            });
        }
    }
});

または、テンプレートを次のように変更できます。

<input type="text" ng-model="$parent.testModel.inputA" my-directive>

イベントバインディングを行うロジックが壊れると考えて、データが入力されます。

そのため、代わりにウォッチャーを使用する方が簡単です。

Working Demo

于 2013-09-11T16:18:01.140 に答える