Ich habe eine benutzerdefinierte Anweisung geschrieben, die ich in meiner Angular 2-Anwendung zum Schließen von Inhaltsfenstern (einige Inhaltshalter in meiner Vorlage) in allen verschiedenen Komponenten meiner Angular 2-Anwendung verwendet. Da dieser Code für jede Komponente ziemlich gleich ist, dachte ich, dass es sinnvoll wäre, eine Direktive zu schreiben, die ich einmal definieren und in allen Komponenten verwenden könnte. Dies ist, was meine Richtlinie wie folgt aussieht:So stellen Sie Direktiven und Komponenten global zur Verfügung
import { Directive, ElementRef, HostListener, Injectable } from '@angular/core';
@Directive({
selector: '[myCloseContentPanel]'
})
export class CloseContentPanelDirective {
private el: HTMLElement;
constructor(el: ElementRef) {
this.el = el.nativeElement;
}
@HostListener('click') onMouseClick() {
this.el.style.display = 'none';
}
}
Nun erwartete ich, dass ich diese Richtlinie einmal in einer app.component Elternkomponente importieren könnte, und dass ich dann diese Richtlinie durch alle untergeordneten Komponenten verwenden könnte. Dies funktioniert leider nicht, daher müsste ich diese Anweisung in jede Komponente separat importieren. Mache ich etwas falsch? Oder ist dieses Verhalten einfach nicht möglich?
Danke! Die Antwort funktioniert, wenn ich dies in der Bootstrap-Datei meiner Anwendung hinzufüge, nicht wenn ich sie in der Root-Komponente hinzufüge. Wie ich es verstehe, ist das Hinzufügen in der Bootstrap-Datei keine Best Practice, haben Sie eine Idee, was das sein könnte? – hY8vVpf3tyR57Xib
Eigentlich habe ich es noch nicht in 'Providern: [...]' von Komponenten selbst ausprobiert. Ich habe den Code auf diese Weise gepostet, weil der Stilführer davon abhält, 'bootstrap()' zu verwenden. Sie könnten versuchen, es stattdessen zu 'directives: []' hinzuzufügen. –
Direktiven und Provider funktionierte bei mir nicht, bootstrap tat es. Wenn Sie dies in Ihrer Antwort erwähnen, werde ich es akzeptieren! – hY8vVpf3tyR57Xib