Вопрос

Когда я генерирую входные теги с помощью NG-Repeat и назначать NG-модель в пользовательской директиве, это вызывает директиву на каждом ударе ключа.

Это демо

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>

Странно.

Это было полезно?

Решение

Это потому, что ng-repeat переоценивает каждый раз, когда вы меняете arr Массив, который должен за ним наблюдать (см. строку l256). здесь в исходниках ngRepeat на Github)

Если указать модель на другой массив — все ок.

Вы можете проверить это с помощью этого Планкр.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top