我有一个建议来实现这样的超时:
$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>
考虑我们有一些 3d 方代码(不是 AngularJS),比如 Cloudinary 插件,它上传一些文件并返回我们“进度”百分比回调。
// .....
.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 aka $scope.file = file_;
所以empty $timeout
为我们完成了这项工作,它将触发摘要循环,并且$scope.file
由 3d 方更新将在 GUI 中重新渲染
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 拆分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等。
通过使用 AngularJS $timeout 服务,包装setTimeout
将在 AngularJS 执行上下文中执行。
有关详细信息,请参阅