Alkalmazza és $ angularjs az emésztést

A két fő szempontja a AngularJS, ami félrevezető lehet, és a alkalmazni a $ $ kivonatot. A cél a cikk megpróbálja elmagyarázni, mi ezt a funkciót, és hogyan lehet hasznos a mindennapi programozási AngularJS.

Megvizsgáljuk a alkalmazni $ és $ az emésztett

Mint ismeretes, angularjs van egy hihetetlen lehetőség az arcát kétirányú adatforgalmat kötésben és, amely többször teszi életünket veled. Ez azt jelenti, hogy ha valamit változtatni az oldalon, és az adatok modell automatikusan frissüljön körét. Ennek megfelelően, ha az első adatmodellt hatálya változik, és küldje el megváltoztatni az oldalt. AngularJS Hogyan működik?

Amikor írsz egy kifejezés (>), a AngularJS csendben tegye követés funkció (virrasztó), amely frissíti a nézetet, ha megváltoztatja a modell. Követési pontosan ugyanúgy írhat magad hatálya alá.

A második argumentum működni hallgató (hallgató), amely az úgynevezett minden egyes alkalommal megváltozik az érték aModel.
Ez könnyen belátható, hogy ha az érték a modell változik, a hallgató által kiváltott frissítése kifejezést HTML. De van még egy nagy kérdés! Mivel AngularJS megérti, hogy meg kell hívni a hallgató funkció? Más szóval, a AngularJS tudják, hogy a modell megváltozott, akkor ahhoz, hogy a hallgató funkció? Lehet, hogy indul ez a funkció, amely időről időre ellenőrizni értékeinek változása a modell hatályát. Itt jön működésbe ciklus $ kivonatot.
A ciklus folyamán elkezdte követni a funkciót. Ezután AngularJS értékét számolja ki a modell, és ha ez megváltozott, akkor a megfelelő hallgató működésbe lép. A következő kérdés - mikor és hol a ciklus kezdődik $ megemészteni?
Ő vezeti a hívás után $ körét. $ Digest (). Tegyük fel, hogy megváltoztatja a körét modell sajtolással feldolgozó funkció irányelv
ng kattintással. Ebben az esetben a ciklus automatikusan elindul AngularJS $ kivonatot. És az indulás után a funkció aktiválva minden pályán. Ezek a funkciók ellenőrizze az aktuális értéke a modell képest a kiszámított érték. Ha ezek különbözőek, akkor a megfelelő funkciót végzi a hallgató. Ennek eredményeként a kifejezések, hogy frissíteni kell az oldalt. Amellett, hogy a ng-click, több irányelvek / szolgáltatás, amely lehetővé teszi, hogy módosítsa a modell és automatikusan elindítja az emésztést $ hurok. (Ng-modell. $ Timeout).
Eddig úgy tűnik, minden egyértelmű, de kevés árnyalatot. AngularJS $ okoz az emésztett helyett közvetlenül használja a $ körét. $ Apply (). ami viszont okoz $ rootScope. $ lenyomatát (). Ennek eredménye, hogy következetesen kerüli minden gyermek körét, és ezáltal a követési funkciókat mindenki számára.
Képzeld el, hogy hung ng kattintás a gombra irányelvet, és felírt neki funkciót. Ha megnyomja a gombot, AngularJS lezárja a funkció a $ körét. $ Apply (). Ie A funkció fog futni, mint mindig, frissíti a modellt (ha szükséges), és ezt követően az emésztett távon $ hurok változtatni jelenik meg az oldalon.
Megjegyzés. $ Scope. $ Apply () automatikusan elindul $ rootScope. $ Digest (). Funkció $ érvényesek () két konstruktőrök. Eredeti - függvény megkapja érvként, végrehajtja azt, majd fut $ megemészteni ciklust. A második - nem fogadja el az érveket, és egyszerűen fut $ az emésztett ciklust. Később látni fogjuk, hogy miért a variáns az érvelés jobb.

Mikor kell hívni $ alkalmazni () a kódot?

Ha AngularJS csomagolja a kódot a $ alkalmazni (), és megkezdi a ciklus $ kivonatot. minden esetben meg kell hívni a alkalmazni $ a kódot? AngularJS nagyon egyszerű ebben a pillanatban. Modell változik csak keretében AngularJS. Ie Kód, amely megváltoztatja a modell belsejében, csomagolva $ alkalmazni (). Beépített AngularJS irányelvek már most, így bármilyen változás a modell tükrözi az oldalt. Lehet, hogy mivel nem volt, ha megváltoztatja a modell keretein kívül angularjs, akkor kell, hogy tájékoztassa angularjs Ezekről a változásokról meghívásával $ érvényesek () a kódot, és máris indul a követés funkció, és a változások lépnek életbe helyesen.

Például, ha használja JS setTimeout () függvényt, hogy frissítse a körét modellek. AngularJS nem tud a változásról. Ebben az esetben a felelősség bejelentés AngularJS a vállán, és még a kódot hívni $ alkalmazni (). amely már elindított egy $ az emésztett ciklust.

Továbbá, ha van saját irányelv, amelyet fel különböző DOM eseményfigyelőkre és a változás egyes modellek a felvezető, meg kell hívni $ alkalmazni (), annak érdekében, hogy biztos, hogy a változások érvénybe lépjenek.

Nézzünk egy példát. A következmény az, hogy van egy olyan oldala a megjeleníteni kívánt üzeneteket rajta késéssel 2 másodpercig. Végrehajtás hasonló lesz a következő:

A frissítés indításához például, látni fogja a frissítést oldal 2 másodperc alatt. Az egyetlen változás a kódot az előző példa, hogy már csomagolva a kódot a $ körét. $ Apply (). amely automatikusan elindítja $ rootScope. $ megemészteni (). Ennek eredményeként, a nyomkövetési funkció elindul, és az érték modellt frissíteni az oldalt.

Megjegyzés. Próbálj meg mindig a szolgáltatás igénybevételéhez $ timeout. amikor csak lehetséges, ami ugyanaz, mint a setTimeout (). amely automatikusan bekapcsolja a $ a alkalmazni, és nem kell építeni azt a kódot.

Szintén fontos megjegyezni, hogy a minta alábbi kódot, a modell frissül, mint rendesen, de a végén alkalmazott $ alkalmazni () paraméterek nélkül.

Ez a változat a módszer a $ körét. $ Apply () paraméterek nélkül, de még mindig a kód működik. De ne feledd, hogy mindig használja $ alkalmazni () érveket. Ez azért van, mert a funkció kerül továbbításra az érv még megpróbálja blokk. fogni, és ha kivétel történik, akkor átmennek a szolgáltatást exceptionHandler $

Hányszor indították a ciklus $ emésztés?

Ha a ciklus indulásakor megemészteni, a követési funkciók végzik, hogy ellenőrizze a modell kör változásai. Ha változott, akkor a megfelelő funkció hallgatók indulnak. Ez ahhoz vezet, hogy egy fontos kérdés. És mi van, ha a hallgató is változik a modell? Ahogy AngularJs reagál erre?
A válasz az, hogy a feltáró ciklus $ egy dob nincs korlátozva. Végén a jelenlegi ciklus kezdődik újra, hogy ellenőrizze a változás modellje. Elvileg ez a „piszkos check» (piszkos ellenőrzés), és ez a változások nyomon követése előfordult a hallgatók. Ezért a ciklus kezdődik időről időre, amíg a végén a modell vagy megváltoztatni nem éri a maximális iterációk száma - 10. Tehát, ez mindig jó, hogy idempotens és megpróbálja minimalizálni a változás a modell hallgatók funkciót.

Megjegyzés. $ Hurok a roncsolt futni legalább 2-szer, ha nincs változás a minták diákok funkciókat. Ahogy fentebb említettük, kezdődik minden elölről, hogy megbizonyosodjon arról, hogy az érték a modell stabil, és nincs változás.

következtetés:

Ossza meg ezt a linket: