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 ...