Глобально зарегистрировать директиву в 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: Я считаю, что это меньше беспокоит сейчас, поскольку компоненты объявлены на уровне модуля. Это означает гораздо меньшее повторение, поскольку вам больше не нужно объявлять дочерние компоненты на уровне отдельных компонентов.