/ / Globalnie zarejestrować dyrektywę w angular2 - angularjs, angleular, angleular2

Globalnie zarejestruj dyrektywę w angular2 - angularjs, angleular, angleular2-guidelines

Zajmuję się tworzeniem aplikacji Angular2. Muszę dodać specjalne zachowanie do wszystkich linków, więc w kanciastym 1.x napisałbym dyrektywę w ten sposób:

angular.module("whatever.module", []).directive("href", function() {
return {
restrict: "A",
link: function($scope, $element, $attrs) {
// do stuff
}
};
});

W angular2 mogę napisać dyrektywę taką jak ta:

@Directive({
selector: "[href]",
})

export class MyHrefDirective {
constructor() {
// whatever
}
}

Ale w jaki sposób mogę powiedzieć aplikacji, aby zastosowała tę dyrektywę na całym świecie? Mam mnóstwo widoków z linkami na nich. Czy muszę go zaimportować i podać w pliku directives tablica w każdym z tych komponentów (co jest DUŻO)?

Próbowałem wstrzykiwać to do bootstrap funkcja podobna do tej, z jaką usługi mają mieć jedną instancję na całym świecie, ale to nie działa

Odpowiedzi:

30 dla odpowiedzi nr 1

Rozumiem, że musisz włączyć wszystkie niestandardowe dyrektywy na poziomie komponentu. Tylko domena PLATFORM_DIRECTIVES jest niejawnie włączona (ngFor, ngIf itp.).

Możesz jednak zarejestrować własną własną dyrektywę jako PLATFORM_DIRECTIVE

import { provide, PLATFORM_DIRECTIVES } from "@angular/core";

bootstrap(RootCmp, [
provide(PLATFORM_DIRECTIVES, {useValue: YourCustomDirective, multi: true}),
]);

Oto artykuł, który mówi więcej o procesie: http://blog.thoughtram.io/angular2/2015/11/23/multi-providers-in-angular-2.html

EDYTOWAĆ: Obecnie uważam, że nie stanowi to problemu, ponieważ komponenty są deklarowane na poziomie modułu. Oznacza to o wiele mniej powtórzeń, ponieważ nie trzeba już deklarować komponentów potomnych na poziomie poszczególnych komponentów.