Задать вопрос
@Memfisrain

Реализация Angular ng-repeat директивы. Что не так?

Всем привет, столкнулся со следующей проблемой. При реализации ангуляровской директивы ng-repeat код работает некорректно и проблема заключается в следующем: элементы рендерятся, но текст внутри них отсутствует. Собственно сам код.
.directive("myRepeat", function() {
		return {
			transclude: "element",
			compile : function(tElem, tAttrs){
				var myLoop = tAttrs.myRepeat,
						match = myLoop.match(/^\s*(.+)+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),
						indexString = match[1],
						collectionString = match[2],
						parent = tElem.parent();

      	return function($scope, iElem, iAttrs, controller, transclude) {
						$scope.$watchCollection(collectionString, function(newCollection) {
						var i, block, childScope, elements = [];

						// check if elements have already been rendered
						if (elements.length) {
							// if so remove them from DOM, and destroy their scope
							for (i = 0; i < elements.length; i++) {
								elements[i].el.remove();
								elements[i].scope.$destroy();
							}
							elements = [];
						}

						for (i = 0; i < newCollection.length; i++) {
							transclude(function(clone, scope) {
								scope[indexString] = newCollection[i];
								parent.append(clone);
								block = {};
								block.el = clone;
								block.scope = scope;
								elements.push(block);
							});
						}
					});
				}
			}
	  }
	})


HTML код:
<ul ng-controller="MyCtrl">
  <li my-repeat="city in cities">{{city.name}}</li>
</ul>


Буду очень благодарен, если кто-нибудь объяснит почему так происходит.
  • Вопрос задан
  • 342 просмотра
Подписаться 2 Оценить 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@vsvladimir
Произошли изменения в angular c transclude функцией. Вот такой вариант работает: liamkaufman.com/blog/2013/05/13/understanding-angu...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы