Создание пользовательского ng-repeat, чтобы избежать $ watch в angularjs

Я использую настраиваемую директиву для ng-repeat, чтобы избежать $watch Я попытался изменить директиву во всех возможных целях, чтобы пропустить $watchCollection(). Но без этого я не могу получить доступ к данным в директиве.

Можно ли создать директиву, которая получает значение модели из dom и обновить страницу DOM без создания $watch?

после myRepeatDirective есть все, что я хочу, чтобы воссоздать эту директиву без $watch.

Я устал использовать одно привязку времени (:: ng-repeat с ng-repeat но это работает с разбиением на страницы. Сетка не обновляется после ее загрузки.

Заранее спасибо.

.directive('myRepeat', [ '$animate', function($animate) {

  var updateScope = function(scope, index, valueIdentifier, value, key, arrayLength) {
    scope[valueIdentifier] = value;
    scope.$index = index;
    scope.$first = (index === 0);
    scope.$last = (index === (arrayLength - 1));
    scope.$middle = !(scope.$first || scope.$last);
    scope.$odd = !(scope.$even = (index&1) === 0);
  };

  return {
    restrict: 'A',
    transclude: 'element',
    compile: function($element, $attrs) {

      var expression = $attrs.myRepeat;

      var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)?\s*$/);

      var valueIdentifier = match[1];
      var collection = match[2];

      return function($scope, $element, $attr, ctrl, $transclude) {

        $scope.$watchCollection(collection, function(collection) {
          var index, length,
            previousNode = $element[0],
            collectionLength,
            key, value;

            collectionLength = collection.length;

            for (index = 0; index < collectionLength; index++) {
              key = index;
              value = collection[key];

              $transclude(function(clone, scope) {
                $animate.enter(clone, null, angular.element(previousNode));
                previousNode = clone;
                updateScope(scope, index, valueIdentifier, value, key, collectionLength);
              });

            }
        });

      }
    }
  }

}]);
+2
источник поделиться

Посмотрите другие вопросы по меткам или Задайте вопрос