Предположим, что каждая директива по карточному предмету должна знать множество внешних контекстов и действует соответственно.Какова наилучшая практика, когда директива AngularJS имеет множество привязок в своей изолированной области?
Мы могли бы сделать услугу для наблюдения за внешним миром, и внедрить услугу в директиву карты пункт, как:
scope: {
item: '=',
service: '=',
}
<card-item item="card"
service="ItemService">
</card-item>
Это кажется плохой практикой, потому что директива слишком много знает о служба (например, вызывает функции службы внутри директивы).
Многие сообщения о передовых методах AngularJS предлагают изоляция, как и следующая.
Но это еще не чувствует себя здесь:
scope: {
item: '=',
isSelected: '&',
inSelectMode: '&',
inMoldMode: '&',
onToggleSelect: '&',
onTogglePreview: '&',
onToggleSort: '&',
onDelete: '&',
isPreviewing: '&',
isSorting: '&',
locales: '=',
printUrl: '=',
}
<card-item item="card"
is-selected="ItemService.isSelected(card)"
in-select-mode="ItemService.inSelectMode()"
in-mold-mode="ItemService.inMoldMode()"
on-toggle-select="ItemService.toggleSelect(card)"
on-toggle-preview="ItemService.togglePreview(card)"
on-toggle-sort="ItemService.toggleSortMode()"
on-delete="ItemService.removeParticle(card)"
is-previewing="card === entityInPreview"
is-sorting="ItemService.inSortMode()"
locales='LocaleService.currentLocales'
print-url="getPrintUrl(card)">
</card-item>
Что ваше предложение?
Спасибо за чтение.
Почему вы не вызываете услугу с контролера? –
Возможно, необходимо разделить директиву 'card-item' на меньшую директиву, которая будет выполнять конкретные задачи. Например, для создания директивы 'card-item-print' для печати или загрузки. Например, чтобы создать предварительный просмотр 'card-item-preview' для предварительного просмотра. И так далее. –
@ Степан Касьяненко. В 'card-item' есть кнопка предварительного просмотра. Когда «карточный элемент» находится в предварительном просмотре, кнопка «Предварительный просмотр» должна быть подсвечена (в то время как другие кнопки «Предварительный просмотр» в «Картах» отсутствуют). Вот почему «карточный элемент» должен знать внешний контекст («является ли я тем предварительным, среди других« карточных элементов »). Благодарим за комментирование. – user2990181