angularjs ng-repeat和ng-model与textarea / input标签不相符

时间:2014-01-09 16:01:55

标签: angularjs angularjs-directive angularjs-ng-repeat

当我使用ng-repeat生成输入标签并在custom指令中指定ng-model时 它会在每个击键时调用指令。

这是演示

http://plnkr.co/edit/Oku8EH?p=preview

var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope) {
  $scope.arr = ["1234567"];
});

app.directive('myDirective', function($compile, $timeout) {
  var num=0;
  return {
    link: function(scope, el, attrs) {
      console.log('this happens with every keyup event in textarea when ng-model is given as arr[$index], why?');
    }
  };
});


<body ng-app="myApp" ng-controller="MyCtrl">
  arr[0] : {{arr[0]}} <br/>
  <input my-directive ng-repeat="str in arr" ng-model="arr[$index]" />
  </input>
</body>

很奇怪。

1 个答案:

答案 0 :(得分:1)

这是因为ng-repeat每次更改arr数组时都会重新评估,因为它必须正在观看它(请参阅Github上ngRepeat源代码中的第l256行here

如果您将模型指向另一个阵列,那么一切正常。

您可以使用此Plunkr查看。