Я шаблон, который содержит (частично) точно так же содержание повторяется два или три раза с небольшими изменениями в привязки, например:повтор содержания (суб-шаблон) в AngularJS
<div class="xyz-state0" data-ng-hide="data.error || !data.states[0].name">
<div class="xyz-content">
<img data-ng-src="{{data.states[0].image}}" width="48" height="48">
<span>{{data.states[0].name}}</span>
</div>
</div>
<div class="xyz-state1" data-ng-hide="data.error || !data.states[1].name">
<div class="xyz-content">
<img data-ng-src="{{data.states[1].image}}" width="48" height="48">
<span>{{data.states[1].name}}</span>
</div>
</div>
Как я напишите это, чтобы избежать дублирования этого HTML? Это характерно для его родительского представления (оно больше не будет использоваться нигде), поэтому создание полномасштабного виджета кажется неправильным.
В основном я хочу что-то похожее на ngRepeat, но я не могу использовать это по следующим причинам:
- мне нужна специфическая (и другое) стиль на каждых родительских делах.
- Мне нужно отобразить определенное количество div (2 в этом случае, 3 в другом) независимо от того, существуют они или нет в области (т. Е. Data.states может содержать только один элемент, но он все еще нуждается для создания обоих div).
- В другом случае предметы должны быть выведены из строя (сначала 1, затем 0, затем 2).
мне удалось получить фрагмент шаблона в отдельный HTML файл и включить его с ngInclude
, но я не знаю, как получить одно имя в новой области, чтобы обратиться к конкретному пункту. Моя первая попытка была эта, которая не работает:
<div class="xyz-state0" data-ng-include="'state.tpl.html'" data-ng-init="state=data.state[0]"></div>
<div class="xyz-state1" data-ng-include="'state.tpl.html'" data-ng-init="state=data.state[1]"></div>
Я подозреваю, что я, вероятно, мог бы сделать это с помощью пользовательского контроллера, но, похоже, тяжелое решение тоже. Что такое правильный путь?
вам нужно будет сделать 'ограничение: 'E'', если вы хотите использовать его как элемент вместо атрибута. И имейте в виду, что вы можете установить класс программно, если вы действительно выполняете состояния [0] как state0 и так далее. Для этого просмотрите ng-class. – pfooti
Я использовал 'ng-class', чтобы программно программировать классы в некоторых других контекстах, но я не уверен, как это поможет здесь. Если вы не предлагаете что-то вроде 'ng-class = '{' xyz-state0 ': $ index == 0,' xyz-state1 ': $ index == 1}" '- Я думаю, что это гораздо менее читаемо, чем то, что У меня есть. (Хотя я признаю, что это позволило бы мне использовать 'ng-repeat' для этого случая, хотя и не тот.) – Miral