Ho un semplice AngularJS directive with a templateUrl. La direttiva è per un suggerimento.Creare una direttiva AngularJS che non esegue il rendering immediato?
- Attualmente aggiungo un elemento nascosto. Tuttavia, la direttiva viene utilizzata molto frequentemente, quindi centinaia di dati < -> collegamenti DOM si verificano e la pagina rallenta fino al punto di diventare inutilizzabile.
- Vorrei caricare solo il modello e aggiungere gli elementi al passaggio del mouse.
Reading the angular docs, there doesn't seem to be any way of making a directive delay rendering. Mi sto perdendo qualcosa?
// Tooltip directive
return function(){
return {
templateUrl: 'someTemplate.html',
replace: false, // Append our tooltip, rather than replace the element's contents.
link: function (scope, element, attrs) {
$element.on({
mouseenter: function() {
// Would like to render, and set up bindings, here (my question)
},
mouseleave: function() {
// Destroy rendered element here (simple stuff, not my question)
}
});
}
}
}
Grazie per la risposta! Ho considerato $ compilare e questo risolverà il secondo problema di come rendere il popup su richiesta, ma come impedire ad Angular di eseguire il rendering immediatamente in primo luogo? – mikemaccana
In breve, non dichiarare un modello per la direttiva. Se lo fai, Angular prenderà il controllo di quando è compilato lontano da te (e lo compila in avanti). In alternativa, è possibile aggiungere il markup come valore di modulo 'angular.module ('myApp', []). Value ('popupMarkup', '
{{property}}
');' e inseriscilo nella funzione di collegamento. Oppure potresti dichiarare quel markup come una variabile String all'interno della tua direttiva se non vuoi essere troppo stravagante. – tnunamak