次のようなタイムアウトを実装する提案がありました。
$timeout(function() {
// Loadind done here - Show message for 3 more seconds.
$timeout(function() {
$scope.showMessage = false;
}, 3000);
}, 2000);
};
setTimeoutを使用するのではなく、これを使用する理由/利点は何ですか?
次のようなタイムアウトを実装する提案がありました。
$timeout(function() {
// Loadind done here - Show message for 3 more seconds.
$timeout(function() {
$scope.showMessage = false;
}, 3000);
}, 2000);
};
setTimeoutを使用するのではなく、これを使用する理由/利点は何ですか?
基本的な言葉で$timeout
は、angularjs を指すときsetTimeout
- JavaScript を指します。
それでも使用することを考えている場合は、後でsetTimeout
呼び出す必要があります$scope.$apply()
補足として
How do I “think in AngularJS” if I have a jQuery background?投稿を読むことをお勧めします
とAngularJS: use $timeout, not setTimeout
$scope.timeInMs = 0;
var countUp = function() {
$scope.timeInMs+= 500;
$timeout(countUp, 500);
}
$timeout(countUp, 500);
$scope.timeInMs_old = 0;
var countUp_old = function() {
$scope.timeInMs_old+= 500;
setTimeout(function () {
$scope.$apply(countUp_old);
}, 500);
}
setTimeout(function () {
$scope.$apply(countUp_old);
}, 500);
デモFiddle
JS
function promiseCtrl($scope, $timeout) {
$scope.result = $timeout(function({
return "Ready!";
}, 1000);
}
HTML
<div ng-controller="promiseCtrl">
{{result || "Preparing…"}}
</div>
Cloudinary プラグインのような (AngularJS ではない) サード パーティ コードがあり、ファイルをアップロードして「進行状況」パーセンテージ レート コールバックを返すとします。
// .....
.on("cloudinaryprogress",
function (e, data) {
var name = data.files[0].name;
var file_ = $scope.file || {};
file_.progress = Math.round((data.loaded * 100.0) / data.total);
$timeout(function(){
$scope.file = file_;
}, 0);
})
UI 別名を更新したい $scope.file = file_;
空 が私$timeout
たちのために仕事をするので、それはダイジェストサイクルをトリガー$scope.file
し、3D パーティによって更新され、GUI で再レンダリングされます