Frage Was ist parentValueWatch in AngularJS?


Ich verwende Batarang, um die Ursache einiger Leistungsprobleme zu ermitteln. Einer der größeren Schuldigen war mein eigener Code, aber diese elterliche ValuWatch-Sache hat jetzt die Spitze der Charts und ich habe keine Ahnung, wo sie ist oder was sie auslöst. Mein Gehirn ist auf dem Boden von so viel Googeln ... irgendjemand weiß?

(AngularJS v1.2.24)

enter image description here


5
2018-02-11 20:55


Ursprung


Antworten:


ParentValueWatch Wenn eine Direktive ihren übergeordneten Bereich überprüft, um zu sehen, ob sich irgendwelche Werte geändert haben und daher selbst geändert werden müssen.

Betrachten Sie die einfache Richtlinie,

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

Jetzt sagen wir im übergeordneten Bereich, foo ist ein Objekt.

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

Jeder $digest cycle, muss der Bereich child $ den übergeordneten Bereich überprüfen foo Wert und jede seiner Eigenschaften.

Ob foo war ein wirklich großes und tief verschachteltes Objekt, das würde lange dauern, weshalb es so lange dauert.

Im HTML könnte dies wie folgt aussehen:

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

Eine schnelle Lösung hierfür besteht darin, die Werte mithilfe von ng-init "einzufrieren".

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

Jetzt der Wert, der an ein neues Objekt gebunden ist. Du verlierst leichte Bindung, gewinnst aber Leistung.

Es ist immer ein Kompromiss.


5
2018-02-11 21:38