2013-06-13 19 views
6

Citazione da uno dei commenti ngCloak direttiva (AngularJS documentation):AngularJS e uso corretto dei ngCloak

è solo veramente necessario sulla tua pagina "index.html", perché il browser può tentare di rendere le cose prima che Angular abbia avuto la possibilità di analizzare /compilarlo. In fase di runtime, quando Angular estrae il contenuto a causa di ng-view, ng-include, ecc., Verrà elaborato da Angular prima del rendering del browser .

Ho creato un esempio in jsFiddle per verificare ciò e con mia sorpresa l'espressione non viene valutata prima di essere visualizzata nel browser. Mi aspetterei che il modello venga prima compilato come & collegato e quindi collegato al DOM, il che non è il caso.

Ciò significa che ogni {{expression}} all'interno dei modelli deve anche essere racchiuso in ngCloak per evitare lo sfarfallio o mi manca qualcosa?

risposta

2

La mia ipotesi è che l'avviso consentono al browser per rendere prima angolare finito il suo lavoro, l'aggiunta di un setTimeout con 0 ritardo mostrare un modello reso:

http://jsfiddle.net/g/FLZZR/5/

function TemplateController ($scope) {  
    $scope.expression = "This should already be rendered..."; 
    setTimeout(function(){ 
     alert("... but it isn't."); 
    }); 
} 

Nota aggiuntiva: si puo' Aspettatevi che il modello sia reso nel momento in cui ponete il vostro avviso, nella migliore delle ipotesi sarebbe nascosto, l'uso angoloso del controllo sporco per fare la sua magia e dovete lasciarlo "digerire" le modifiche che devono essere mostrate nel DOM.

+0

Hai ragione su quello ... Forse non era il miglior esempio che ho fornito (appena risolto) ... Capisco che il ciclo "digest" è necessario per il template da renderizzare .. Ma mi aspettavo (come ho già ha detto) che il modello sarà compilato e collegato per primo e poi aggiunto al DOM - se questo fosse il caso, non ci sarebbe alcun cambiamento nel DOM prima che l'avviso si aprisse. Quindi sembra che non importi se la pagina è inizialmente caricata o se i modelli sono caricati successivamente da Angular - 'ngCloak' dovrebbe essere usato esattamente allo stesso modo, giusto? – PrimosK

+0

È importante perché non è possibile visualizzare il modello non restituito se non si "spezza" il ciclo di vita angolare (con l'avviso), non importa che sia collegato al DOM, non sono sicuro che sia chiaro ma è difficile spiegare – Guillaume86

+0

ma è possibile visualizzare un modello non restituito prima che angolare sia "avviato", è lo scopo di ng-cloak – Guillaume86