0

これは、以前の質問から少し便乗しています。モデル/配列からのディレクティブとデータを操作しようとしています

私のモデルは次のようになります。

$scope.testModel = {
    inputA:[1,2,3]
};

次に、それぞれに入力があります。

私のディレクティブは、キーアップ時に、入力が特定の数値 (10) より大きいかどうかをチェックしています。そうであれば、それを 10 に設定します。

link: function(scope, element) {          
      scope.$watch('ngModel',function(val){
          element.val(scope.ngModel);
      });
      element.bind("keyup", function(event) {
          if(parseInt(element.val())>10){
              element.val(10);
              scope.ngModel=element.val();
              scope.$apply();
          }
      });          
  }

問題は、入力に応じてエラーが発生することです。

TypeError: 未定義のプロパティ '0' を設定できません

私が設定したエラーとコードを確認するためのフィドルは次のとおりです: https://jsfiddle.net/prXm3/3/

ノート

サーバーから直接データセットを受け取るので、データセットを変更したくありません。モデルを変更してinputA0:1,inputA1:2,inputA2:3機能させることができることはわかっていますが、アプリが取得したときにデータを変換し、サーバーに送り返すときに再変換する必要があります。モデルを設定したままにしておくことをお勧めします。

4

1 に答える 1

3

ディレクティブは と対話しngModelているため、モデルとビューの両方を更新するには、ディレクティブと連携する必要があります。

angular.module('test', []).directive('myDirective', function() {
  return {
      restrict: 'A',
      require: '?ngModel',      
      link: function(scope, element, attrs, ngModel) {                              
          if (!ngModel) return;

          ngModel.$parsers.unshift(function(viewValue) {
              if(parseInt(viewValue) > 10) {
                  ngModel.$setViewValue(10);
                  ngModel.$render();        
                  return 10;
              }
              else
                  return viewValue;
          });          
      }
  }
});

作業中の jsFiddle

詳細については、次の投稿をご覧ください。

于 2013-09-11T18:09:05.060 に答える