2015-02-11 4 views
5

Sto usando batarang per determinare l'origine di alcuni problemi di prestazioni. Uno dei maggiori colpevoli era il mio codice, ma questa cosa di parentValueWatch ora è in cima alle classifiche e non ho idea di dove sia o di cosa lo inneschi. Il mio cervello è sul pavimento da così tanto su Google ... qualcuno lo sa?Che cos'è parentValueWatch in AngularJS?

(AngularJS v1.2.24)

enter image description here

+0

Questa è una funzione che controlla le modifiche nello scope principale rispetto all'ambito isolato di una direttiva che utilizza 'scope: {param:" = "}'. Ecco la [fonte] (https://github.com/angular/angular.js/blob/v1.2.24/src/ng/compile.js#L1487). Assicurarsi che i valori associati non siano associati a funzioni di lunga durata –

risposta

5

ParentValueWatch è quando un direttiva controlli nel suo campo di applicazione genitore per vedere se tutti i valori sono cambiati e, quindi, hanno bisogno di essere se stesso cambiato.

consideri la semplice direttiva,

{ 
    restrict:"AE", 
    scope:{ 
     foo:'=' 
    } 
} 

Ora diciamo che nel campo di applicazione genitore, foo è un oggetto.

$parent.$scope.foo = { 
    bar:"zim" 
} 

Ogni ciclo $digest, il $ ambito bambino avrà bisogno di controllare il valore foo del campo di applicazione principale e ciascuna delle sue proprietà.

Se foo era un oggetto molto grande e profondamente annidato, ciò richiederebbe molto tempo, quindi perché ci vuole così tanto tempo.

All'interno del codice HTML, questo potrebbe apparire come questo:

<div parent-directive> 
<div foo-directive foo=bar></div></div> 

Un lavoro rapido giro per questo è di "congelare-secco" i valori utilizzando ng-init.

<div parent-directive> 
<div foo-directive ng-init='zug={bar:$parent.foo.bar}' foo=zug></div></div> 

Ora il valore associato a un nuovo oggetto. Perdi facilmente vincolante, ma ottieni prestazioni.

È sempre un compromesso.

Problemi correlati