Динамически загружать шаблон внутри ng-repeat

Я пытаюсь динамически загружать шаблон в ng-repeat:

<ul>
    <li ng-repeat="prop in entity" >
        <div ng-include src="prop.template"></div>
    </li>
</ul>

prop.template равен URL-адресу шаблона, например. 'partials/form/text.html'. Приведенный выше код вызывает следующую ошибку:

Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [["prop.template; newVal: \"partials/form/text.html\"; oldVal: undefined","prop.template; newVal: \"partials/form/text.html\"; oldVal: undefined" .... (and so on)

Как получить URL-адрес шаблона из prop.template и вставить HTML из этого файла в DOM внутри ng-repeat?

Ответ 1

http://docs.angularjs.org/api/ng. $rootScope.Scope # $digest

Обработать всех наблюдателей текущей области и ее детей. Поскольку слушатель-наблюдатель может изменить модель, $digest() продолжает называть наблюдателей, пока больше не слушаются слушатели. Это означает, что можно попасть в бесконечный цикл. Эта функция будет выдавать "Максимальный предел итерации". если число итераций превышает 10.

Проблема здесь не в коде, она должна работать отлично. См. Рабочий пример здесь: http://jsfiddle.net/fmjf8/2/

Проблема заключается либо в том, что у вас может быть слишком много элементов в вашем массиве ngRepeat, либо в шаблоне вашего массива, или в шаблоне, который вы включаете, делается слишком много вещей, создавая бесконечную защиту цикла angular. Я голосую за вторую

Ответ 2

Я знаю, что это немного не связано, но я искал похожую проблему, и мои поиски привели меня сюда в какой-то момент. И поскольку в интернете не так много источников об ангулярности, я пишу это здесь для других несчастных людей.

Моя проблема с ng-include:

У меня были представления шаблонов (html файлов), загруженные с помощью ng-view из параметров маршрута, и ng-include ссылался на один из этих шаблонов внутри другого. Это произвело точно такой же отклик на angular стороне.

Насколько я понимаю, это происходит:

Когда ng-include пытается внедрить html файл шаблона в исходный, он пытается сделать это с нуля, то есть все перезагружается, включая исходный html файл, общие файлы, все шаблоны;

templateX. html-> ng-include (templateY) → templateX.html → templateY.... так что настоящий бесконечный цикл, дайджест только предотвращает сбой вашего браузера из-за чрезмерного DOM.

Затем я попытался использовать полные пути вместо любых относительных, и это решило мою проблему.

Возможно, вы можете использовать полные пути внутри ng-include, чтобы решить вашу проблему.

Надеюсь, это немного поможет.