2013-07-17 17 views
6

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) 
        } 
       }); 
      } 
     } 
    } 

risposta

1

Credo che si sta per necessità di iniettare il servizio $compile a fare qualcosa di simile all'interno del callback:

templateMarkup = '<p> {{ property }} </p>'; 
$compile(templateMarkup)(scope); 

Non ho pensato attraverso la procedura esatta per adattarsi questo nel tuo codice ma fammi sapere se sarebbe utile.

+0

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

+2

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

Problemi correlati