Angularjs的 apply及其優化使用

2021-09-20 08:57:45 字數 1362 閱讀 4835

error: $digest already in progress

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

首先,你要清楚,在原生js或者第三方框架下,修改model,是有可能不會觸發檢視更新的,比如settimeout、jquery外掛程式。為什麼?因為他們脫離了angularjs的上下文,angularjs並不能監聽到資料的改變。看例子。

1.settimeout

html:

}

js:

$scope.name="張三";

settimeout(function(),500)

2.第三方外掛程式

html:

date: 

所選日期

}

js:

$scope.selecteddate = '';

$( function()

});} );

在digest是angularjs的核心,是它實現了神奇的資料繫結。凡是觸發事件,必會觸發digest迴圈,比如,我們數值的ng事件,click啊,change,實際上都是觸發了digest迴圈。

二.更好地運用digest迴圈

1.$digest

2.$timeout

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

$digest already in progress
我們把settime的**放到$timeout中

$timeout(function(),500)
3.$evalasync

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

$scope.$evalasync(

function( $scope )

);

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

下面是可執行的**,大家可以****

的apply 易混淆函式札記 apply系列函式

在r語言中,有些函式由於名字相似,或者功能相似,容易混淆。因此,我計畫記錄一些在r中易混淆的函式,相應的文章題目都是冠以易混淆函式札記。這是這個系列的第一篇文章。這篇文章中用的資料集是r中自帶的mtcars資料集,可以直接呼叫。由於該資料集列數較多,為了方便理解,我們只取其mpg,cyl,hp列,分...

Python Pandas的apply函式使用示例

資料大致是這個樣子 美國人口普查資料 以每個州人口最多的 3 個縣的人口總和為這個州人口的衡量標準,哪 3 個州人口最多?在 2010 年至 2015 年間人口變化幅度最大的是哪個縣?先按州分組,再對每個州內的縣進行排序選出人口最多的 3 個縣求和,作為每個州的人口數,最後排序。對於每個縣,計算 2...

apply的使用技巧

obj 這個物件將代替function類裡this物件 args 這是乙個陣列或者類陣列物件,它將作為引數傳給function function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this物件 params 這個是乙個引數列表 a ...