Angular - 反映ngModel数组的指令

时间:2013-09-11 17:25:34

标签: angularjs angularjs-directive

这有点像先前的问题。我一直在尝试使用模型/数组

中的指令和数据

我的模型看起来像这样:

$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”

这是查看我设置的错误和代码的小提琴:http://jsfiddle.net/prXm3/3/

注意

我不想更改数据集,因为我直接从服务器接收数据集。我知道我可以将模型更改为inputA0:1,inputA1:2,inputA2:3并使其工作,但是当我的应用程序获取数据时我将不得不转换数据,然后在我发送回服务器时重新转换它。我希望在设置模型时离开模型。

1 个答案:

答案 0 :(得分: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;
          });          
      }
  }
});

Working jsFiddle

也许您有兴趣查看以下帖子以获取更多信息: