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

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

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

следующий myRepeatDirective есть все, что я хочу воссоздать эту директиву без $watch,

Я устал использовать одноразовую привязку (::) с 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);
              });

            }
        });

      }
    }
  }

}]);

0 ответов

Другие вопросы по тегам