Desidero avere una direttiva che controlli il componente tag name
e in base a qualche condizione mostri/nasconda il componente. Voglio mostrare che si nasconde per comportarsi come ng-if
(non inizializzando il controller del componente). Esempio:Direttiva angolare ng-if
<my-component custom-if></my-component>
All'interno della direttiva custom-if
:
return {
compile: function($element) {
if($element[0].tagName === 'some condition'){
//Element is my-component
$element.remove();
}
}
};
Il problema che ho è che, anche se tolgo elemento si chiama ancora controllore della mia componente. Lo stesso accade se rimuovo l'elemento all'interno della funzione compile
o preLink
della direttiva. Ho anche cercato di ereditare ng-if
ma non riesco a ottenere il nome del tag del componente all'interno custom-if
direttiva, poiché l'elemento è un comment
(probabilmente lo è ng-if
comportamento specifico per avvolgere elemento all'interno commento)
UPDATE: Modificato postLink
funzione a compile
per assicurarsi che non funzioni altrettanto bene. Essa mostra/nasconde l'elemento ma crea un'istanza sempre regolatore anche se viene rimosso ed è quello che voglio evitare
Invece di fare la logica in collegamento spostarlo per la compilazione. Facendolo lì dovrebbe permetterti di rimuovere quell'elemento dal DOM e anche escludere quell'elemento dal collegamento. –
non aiuta. L'ho scritto all'interno della domanda – jonasnas
Ok, ma la chiave è di dire a $ compilatore di saltare la fase di collegamento della compilazione del modello in funzione di compilazione. E il compilatore restituisce sempre la funzione di collegamento che avrà sempre accesso al controller (come quarto argomento) quindi, a meno che non ti fermi a compilare, otterrai sempre un controller. Buona domanda a proposito. –