Глобально зарегистрировать директиву в Angular
Я разрабатываю приложение Angular. Мне нужно добавить специальное поведение для всех ссылок. В AngularJS просто напишите директиву так:
angular.module('whatever.module', []).directive('href', function() {
return {
restrict: 'A',
link: function($scope, $element, $attrs) {
// do stuff
}
};
});
В Angular я могу написать такую директиву:
@Directive({
selector: '[href]',
})
export class MyHrefDirective {
constructor() {
// whatever
}
}
Но как я могу сказать приложению использовать эту директиву глобально? У меня тонна просмотров со ссылками на них. Должен ли я импортировать его и указать его в массиве directives
в каждом из этих компонентов (что много)?
Я попытался внедрить его в функцию bootstrap
как вы должны делать со службами, чтобы иметь один экземпляр в глобальном масштабе, но это не сработало
Ответы
Ответ 1
Я понимаю, что вы должны выбрать все пользовательские директивы на уровне компонентов. Только PLATFORM_DIRECTIVES неявно включены (ngFor, ngIf и т.д.).
Однако вы можете зарегистрировать свою собственную настраиваемую директиву как PLATFORM_DIRECTIVE
import { provide, PLATFORM_DIRECTIVES } from '@angular/core';
bootstrap(RootCmp, [
provide(PLATFORM_DIRECTIVES, {useValue: YourCustomDirective, multi: true}),
]);
Вот статья, в которой больше говорится о процессе:
http://blog.thoughtram.io/angular2/2015/11/23/multi-providers-in-angular-2.html
EDIT:
Я считаю, что это меньше беспокоит сейчас, поскольку компоненты объявлены на уровне модуля. Это означает гораздо меньшее повторение, поскольку вам больше не нужно объявлять дочерние компоненты на уровне отдельных компонентов.