5

Ho studiato angularJs nelle scorse settimane e ho esaminato diverse app su larga scala per vedere come funzionano le cose nel mondo reale. Nella maggior parte di loro ho notato quando una vista caricato:modo corretto per inizializzare i valori degli scope quando la vista è caricata con angularjs, ngInit?

ng-init="init()" 

cioè la funzione init() viene chiamato nel controller pertinente. È usato per impostare i valori iniziali.

MA (grande ma) quando la lettura attraverso la documentazione angolari su ngInit sono arrivato a una piuttosto severo descrizione cercando:

"L'unico uso appropriato di ngInit per aliasing proprietà speciali di ngRepeat, come si vede nella demo di seguito. Oltre a questo caso, è necessario utilizzare i controller anziché ngInit per inizializzare i valori su un ambito. "

quindi la mia domanda è, E 'cattiva pratica di utilizzare ngInit per inizializzare i valori in un ambito in cui la vista è caricato? se sì, perché è questo? e qual è il modo corretto?

risposta

7

È una cattiva pratica perché la vista è inizializzata in un momento diverso rispetto al controller E il ciclo di digest deve elaborare quella funzione, che è un'aggiunta non necessaria a quel ciclo. I suppone che si abbia qualcosa di simile:

Vista:

<div ng-init="init()"> 
<span>{{thing}}</span> 
</div> 

Controller:

Module.controller('viewController', function(scope){ 
    ... 
    var init = function(){ 
    scope.thing = "123"; 
    ... 
    } 
    ... 
}) 

La pratica migliore è quella di fare questo:

Vista:

<div> 
<span ng-bind="thing"></span> 
</div> 

Regolatore:

Module.controller('viewController', function(scope){ 
scope.thing = "123"; 
}) 
+2

In realtà, io ti consiglierei di utilizzare la direttiva ngBind all'interno del lasso di evitare l'effetto lampeggiante è il javascript non è completamente caricato quando la pagina viene visualizzata (ad esempio: ) –

+0

Mentre sei corretto, dalla documentazione angolare:" È preferibile utilizzare ngBind invece di {{espressione}} quando un modello viene momentaneamente visualizzato dal browser nel suo stato grezzo prima che Angular lo compili. " Questo mi indica che stai meglio aspettare di vedere se hai effettivamente quel problema prima di passare a ng-bind. – Fourth

+0

Potresti non vedere mai il problema perché il tuo browser potrebbe essere in esecuzione su un computer topnotch. Suggerisco di usarlo in modo prevenuto dal momento che non esiste un rovescio della medaglia. –

Problemi correlati