0

这是对早先的问题的一点支持。我一直在尝试使用模型/数组中的指令和数据

我的模型看起来像这样:

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

然后我会为每个输入。

我的指令是在 keyup 上检查输入是否大于给定数字 (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 回答