的setTimeout的我的代碼:如何使用具有角
if (xxx == xxx){
var x = 5 + 3;
setTimeout(function() {
$('.regErrMsg').text("");
$scope.errMsg = "Hi.";
}, 5000);
}
我想在5秒後執行的函數,即顯示「你好」的消息。那麼,我的代碼是否正確?截至目前,該消息沒有顯示出來。我哪裏錯了?
的setTimeout的我的代碼:如何使用具有角
if (xxx == xxx){
var x = 5 + 3;
setTimeout(function() {
$('.regErrMsg').text("");
$scope.errMsg = "Hi.";
}, 5000);
}
我想在5秒後執行的函數,即顯示「你好」的消息。那麼,我的代碼是否正確?截至目前,該消息沒有顯示出來。我哪裏錯了?
我的問題是,你好執行,然後等待5秒或等待5秒,然後顯示你好?
讓我們考慮一個簡單的例子
foo();
setTimeout(function() {bar();}, 5000);
baz();
現在,它更容易來形容會發生什麼,一步一步(在痛苦的詳細)
foo
得到解釋()
調用foo
setTimeout
被解釋setTimeout
的參數被解釋,即這裏設置(/* ... */)
調用setTimeout
setTimeout
設置要調用的回調說法0
後參數1
毫秒()
調用巴茲baz
被解釋0
(從5
)被(從4
使用引用)調用bar
得到解釋()
調用bar
截至目前,該消息沒有顯示出來。我哪裏錯了?
看起來將在DOM反映您所做的唯一的變化是從.regErrMsg
文本的清理,也許你想用
$('.regErrMsg').text("Hi.");
或調用其他方法這將使$scope
的更新價值反映在#文檔
在控制器中使用setTimeout的「問題」是角度不會在調用setTimeout中的函數之後觀察範圍的內容。
你可以做$scope.$apply()
迫使視圖進行更新,如:
setTimeout(function() {
$scope.errMsg = "Hi.";
$scope.$apply();
}, 5000);
他們是一個特殊的功能$timeout
將後自動觸發視圖刷新該功能已被調用。它與setTimeout具有相同的簽名。
$timeout(function() {
$scope.errMsg = "Hi.";
//You don't need $scope.$apply() here
}, 5000);
你應該注入$超時到控制器中
我已刪除了$('.regErrMsg').text("");
,因爲你不應該改變一個控制器內部的DOM。
setTimeout看起來很好......你看到'.regErrMsg'文本消失了嗎?你希望改變$ scope的.errMsg屬性來做什麼?它似乎不會立即彈出一條消息?也許你應該在setTimeout之前和setTimeout回調中放置一個console.log,並觀察你的控制檯。這將幫助您確定問題出在哪裏。 – smerny 2014-09-10 15:32:04
無論這個條件是什麼'if(xxx == xxx){'被認爲是因爲它看起來有點狡猾嗎?它是真實的代碼嗎? – Andy 2014-09-10 15:32:13
是.... xxx - 我替換了我的條件。只要把它作爲一個真正的價值。 – 2014-09-10 15:33:12