Ho scritto una direttiva personalizzata che utilizzo nell'applicazione Angular 2 per chiudere i pannelli di contenuto (alcuni supporti di contenuti nel mio modello) in tutti i diversi componenti dell'applicazione Angular 2. Dato che questo codice è lo stesso per ogni componente, ho pensato che avrei avuto senso scrivere una direttiva che potrei definire una sola volta e usarla in tutti i componenti. Questo è ciò che la mia direttiva appare come:Come rendere le direttive e i componenti disponibili globalmente
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';
}
}
Ora mi aspettavo che avrei potuto importare questa direttiva, una volta in un componente genitore app.component, e che ho poi potuto utilizzare questa direttiva in tutte le componenti figlio. Purtroppo non funziona, quindi dovrei importare separatamente questa direttiva in ciascun componente. Sto facendo qualcosa di sbagliato? O questo comportamento semplicemente non è possibile?
Grazie! La risposta funziona quando aggiungo questo nel file bootstrap della mia applicazione, non quando lo aggiungo nel componente root. Come ho capito, aggiungerlo nel file bootstrap non è la migliore pratica, hai un'idea di cosa potrebbe essere? – hY8vVpf3tyR57Xib
In realtà, non l'ho ancora provato in 'provider: [...]' di componente. Ho postato il codice in questo modo perché la guida di stile scoraggia usando 'bootstrap()'. Potresti provare ad aggiungerlo alle 'direttive: []' invece. –
Le direttive e i provider non hanno funzionato per me, ha fatto il bootstrap. Se lo dici nella tua risposta, lo accetto! – hY8vVpf3tyR57Xib