亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Angularjs中的$apply及優化使用詳解

2019-11-19 13:34:54
字體:
來源:轉載
供稿:網友

前言

對于一個在前端屬于純新手的我來說,Javascript都還是一知半解,要想直接上手angular JS,遇到的阻力還真是不少。不過我相信,只要下功夫,即使是反人類的設計也不是什么大的問題。

今天,我們要聊得是Angularjs中的小明星$apply。當我們數據更新了,但是view層卻沒反應時,總能聽到有人說,用apply吧,然后,懵懂無知的我們,在賦值代碼后面加了$scope.$apply() ,然后就驚喜的發現。噢,真的更新了。

然而,有些時候,編譯器會無情的給你返回

Error: $digest already in progress

那么,導致這些現象的原因時什么的呢?$apply究竟干了啥?聽我慢慢到來。

一.$apply的作用

$apply()函數可以從Angular框架的外部讓表達式在Angular上下文內部執行。

上面是AngularJs權威教程中的一句話。什么意思呢?

首先,你要清楚,在原生js或者第三方框架下,修改model,是有可能不會觸發視圖更新的,比如setTimeout、jquery插件。為什么?因為他們脫離了Angularjs的上下文,Angularjs并不能監聽到數據的改變??蠢?。

1.setTimeout

html:

<p>{{name}}</p>

js:

$scope.name="張三";setTimeout(function(){$scope.name = '李四';//$scope.$apply()},500)

首先,name等于張三,500ms后,我把他賦值為李四,但是,頁面上并沒有改變,依然是張三。

而,我們把$scope.$apply()放開,就正常了,張三成功變為李四。

2.第三方插件

html:

<p>Date: <input type="text" id="datepicker"></p><p><header>所選日期</header>{{selectedDate}}</p>

js:

$scope.selectedDate = '';$( function() { $( "#datepicker" ).datepicker({ onClose: function( selectedDate ) { $scope.selectedDate = selectedDate; // $scope.$apply(); } });} );

這是jquery的datepicker插件,當我們選定日期后,下面的日期應該隨之顯現,而現在卻沒有。這種情況就必須依靠$apply(),才能更新視圖。

以上兩種情況,都因為不處于Angularjs上下文中,導致監聽不到數據的變化。而$apply究竟干了什么,才導致數據更新正常了呢?

其實$apply相當于一個觸發器,它的作用就是觸發digest循環,從而更新視圖。

在digest是Angularjs的核心,是它實現了神奇的數據綁定。凡是觸發事件,必會觸發digest循環,比如,我們數值的ng事件,click啊,change,實際上都是觸發了digest循環。

所以,我們所做的事,其實就是手動觸發了digest循環。關于digest循環,屬于題外話,這里不做過多介紹,想深入了解的同學,可以看看書籍,或者百度。

二.更好地運用digest循環

在Angularjs中,除了$apply可以觸發digest循環外,還有其他的方法,也可以觸發此循環。而且$apply往往時最壞的選擇。下面推薦一些更好的選擇。

1.$digest

$scope.$digest()的速度要比$apply要快,因為它只更新當前作用域和子作用域的值,對于父作用域時不管的。而$apply還要評估父作用域,這就大大消耗了性能。

2.$timeout

用$timeout去代替你的setTimeout,$timeout作為Angularjs的自帶服務,當然時更契合Angularjs環境啦。它會隱性觸發digest循環,而且它會延遲執行,會在上一個digest循環完成后的下一刻,觸發digest循環,這樣就不會出現上文所說的

$digest already in progress

我們把setTime的代碼放到$timeout中

$timeout(function(){$scope.name = '李四';},500)

這就能正常工作了,看,沒有討厭的apply了!

3.$evalAsync

最推薦的應該時這個方法了。如果當前正好有一個digest循環在執行,那么它就會把導致digest循環的操作,放到當前digest循環中去執行。而$timeout是要等到當前digest循環執行完,再執行一次digest循環才可以。所以evalAsync執行更快,性能更好。我們可以像$timeout那樣去調用它,即

$scope.$evalAsync(   function( $scope ) {   console.log( "$evalAsync" );   }  );

以上,就是今天要說的全部內容。Angularjs中還藏著許多奧秘,和更好的使用方法,希望大家可以深入地研究,分享出更好的文章。

下面是可執行的代碼,大家可以探究探究:https://codepen.io/hanwolfxue/pen/yEZbYQ

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区香蕉久久| 亚洲网站在线看| 亚洲精选一区二区| 成人性教育视频在线观看| 美女av一区二区| 久久91亚洲人成电影网站| 91系列在线播放| 色综合视频一区中文字幕| 尤物yw午夜国产精品视频明星| 国产精品久久视频| 亚洲成人精品视频在线观看| 26uuu亚洲伊人春色| 国产精品久久婷婷六月丁香| 色多多国产成人永久免费网站| 亚洲人线精品午夜| 亚洲最大av网| 国产精品九九久久久久久久| 欧美日韩中文字幕在线视频| 国产精品久久久久国产a级| 色综合久综合久久综合久鬼88| 国产精品高潮呻吟视频| 国产69精品久久久久久| 最近日韩中文字幕中文| 夜夜嗨av色一区二区不卡| 亚洲午夜精品久久久久久久久久久久| 久久久久久久久久久91| 欧美精品精品精品精品免费| 久久久97精品| 精品国产网站地址| 欧美日韩国产一区二区三区| 欧美黄色性视频| 91精品国产色综合久久不卡98口| 色偷偷91综合久久噜噜| 国产成人av在线播放| 69av在线播放| 亚洲精品国产成人| 久久久精品美女| 日韩欧美一区视频| 国产成人在线亚洲欧美| 精品亚洲一区二区三区在线播放| 日韩在线免费高清视频| 国产日本欧美一区二区三区| 久久亚洲国产精品成人av秋霞| 日韩有码片在线观看| 91av在线不卡| 日韩av片免费在线观看| 欧美最顶级丰满的aⅴ艳星| 日本午夜在线亚洲.国产| 亚洲国产一区二区三区在线观看| 一区二区中文字幕| 91久久久久久久| 国产亚洲成精品久久| 成人福利网站在线观看| 亚洲iv一区二区三区| 亚洲第一中文字幕| 91视频国产一区| 综合国产在线观看| 午夜精品久久久久久久久久久久| 一区二区亚洲精品国产| 国产精品久久久久久久美男| 国产精品日韩欧美综合| 亚洲国产古装精品网站| 日韩免费观看av| 国产精品自产拍在线观看| 一区二区三区动漫| 日本亚洲欧洲色α| 国产suv精品一区二区| 欧美野外猛男的大粗鳮| 亚洲欧美一区二区三区情侣bbw| 亚洲深夜福利视频| 久久久精品亚洲| 裸体女人亚洲精品一区| 91成人国产在线观看| 亚洲国产精品久久精品怡红院| 一区二区福利视频| 一本一本久久a久久精品综合小说| 精品亚洲一区二区三区在线播放| 欧美黄色片在线观看| 亚洲精品视频播放| 日韩中文字幕网站| 91成人在线视频| 国产精品白嫩初高中害羞小美女| 欧美超级免费视 在线| 国产午夜精品一区理论片飘花| 欧美国产乱视频| 成人免费激情视频| 久久久91精品国产| 粉嫩av一区二区三区免费野| 亚洲电影av在线| 亚洲aⅴ日韩av电影在线观看| 午夜美女久久久久爽久久| 欧美午夜丰满在线18影院| 欧美一区三区三区高中清蜜桃| 欧美黄色小视频| 国产精品扒开腿做| 欧美高清视频在线播放| 国产精品高潮呻吟视频| 欧美性猛交xxxx免费看久久久| 91影视免费在线观看| 欧美日韩性生活视频| 97超碰蝌蚪网人人做人人爽| 日韩av电影在线网| 国产精品va在线播放| 欧美日韩第一视频| 日韩av在线最新| 国产91亚洲精品| 最近2019年中文视频免费在线观看| 欧美激情aaaa| 欧美视频不卡中文| 91成人在线视频| 2019最新中文字幕| 国产专区欧美专区| xvideos亚洲| 欧美放荡办公室videos4k| 国产精品第3页| 国产+成+人+亚洲欧洲| 久久久久日韩精品久久久男男| 欧美日本亚洲视频| 久久免费视频在线观看| 日本高清视频精品| 亚洲综合视频1区| 日韩黄色在线免费观看| 日韩欧美亚洲一二三区| 亚洲激情在线观看视频免费| 亚洲白拍色综合图区| 久久久久久午夜| 亚洲新声在线观看| 欧美精品情趣视频| 亚洲国产精品99| 亚洲免费成人av电影| 91精品国产乱码久久久久久久久| 午夜剧场成人观在线视频免费观看| 51视频国产精品一区二区| 亚洲国产中文字幕久久网| 色99之美女主播在线视频| 91夜夜未满十八勿入爽爽影院| 欧美精品手机在线| 国产综合久久久久久| 日韩视频免费中文字幕| 91视频免费在线| 久久综合电影一区| 国产精品三级久久久久久电影| 97成人超碰免| 欧美精品日韩www.p站| 日韩av手机在线看| 色视频www在线播放国产成人| 亚洲第一视频网站| 日本欧美中文字幕| 国产精品视频公开费视频| 日韩亚洲一区二区| 88xx成人精品| 国产一区二区三区视频| 久久久久久久久91| 亚洲国产精品悠悠久久琪琪| 日韩欧美在线视频| 国产91成人在在线播放| 亚洲韩国日本中文字幕| 日本精品视频网站| 中文字幕亚洲欧美一区二区三区| 日韩av中文字幕在线免费观看| 国产性色av一区二区| 亚洲xxxx妇黄裸体| 亚洲天堂男人的天堂| 国产精品爱啪在线线免费观看|