如何将setTimeout与AngularJs一起使用
How to use the setTimeout with AngularJs
我有代码:
if (xxx == xxx){
var x = 5 + 3;
setTimeout(function() {
$('.regErrMsg').text("");
$scope.errMsg = "Hi.";
}, 5000);
}
我想执行该功能,即在5秒钟后显示"嗨"消息。那么,我的代码正确吗。截至目前,该消息尚未显示。我哪里错了?
我的问题是。。Hi执行后等待5秒,还是等待5秒后显示Hi?
让我们考虑一个简化的示例
foo();
setTimeout(function () {bar();}, 5000);
baz();
现在更容易描述将要发生的事情,一步一步(极其详细)
- 第1行:
foo
被解释 ()
调用foo
- 第2行:
setTimeout
得到解释 - 要传递到
setTimeout
的参数将被解释,即此处设置的函数引用 (/* ... */)
调用setTimeout
setTimeout
设置回调以在参数1
毫秒后调用变量0
- 第3行:
baz
得到解释 ()
调用baz- 文件结束。。。暂时什么事也没发生
- 调用参数
0
(来自5
) - 对
bar
进行解释(使用4
中的引用) ()
调用bar
截至目前,该消息尚未显示。我哪里错了?
看起来您所做的唯一更改将反映在DOM中,它是从.regErrMsg
中清除文本,也许您打算使用
$('.regErrMsg').text("Hi.");
或者调用其他方法,使$scope
的更新值反映在#document
控制器内部setTimeout的"问题"是,在调用setTimeout中的函数后,angular不会监视范围的内容。
解决方案1
您可以执行$scope.$apply()
以强制更新视图,例如:
setTimeout(function() {
$scope.errMsg = "Hi.";
$scope.$apply();
}, 5000);
解决方案2
它们是一个特殊的函数$timeout
,它将在调用该函数后自动触发视图刷新。它具有与setTimeout相同的签名。
$timeout(function() {
$scope.errMsg = "Hi.";
//You don't need $scope.$apply() here
}, 5000);
您应该将$timeout注入您的控制器
我已经删除了$('.regErrMsg').text("");
,因为您不应该更改控制器内的dom。
相关文章:
- 如何将eventListeners与Angularjs+Electron一起使用
- D3.js气泡图;t与AngularJS一起出现
- 如何使用AngularJS将if语句conditon与json响应一起使用
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 为什么 HTML 中的 Value 属性在与 AngularJS 中的 ng-model 一起使用时不起作用
- 获得错误“;对象没有方法'jScrollPane'"与AngularJS一起使用时
- 将html ID与angularJS一起使用
- AngularJS和JS Math.max.apply()不能一起工作
- 400错误请求仅使用AngularJs,与jQuery一起使用
- 如何在 AngularJS 中与其他参数一起上传 http.post 的图像文件
- 如何将 Bootstrap Timepicker 与 AngularJS 一起使用
- 无法让 animationjs 与 AngularJS 一起工作
- 如何在 AngularJS 中将自定义指令与外部 HTML 模板捆绑在一起
- Jquery append() 不与 angularjs 一起使用
- 一段时间后隐藏与 angularjs 表单验证一起显示的错误标签
- javascript [],[[]] 和 [{}] 在 angularJS 中与 ng-repeat 一起使用时的工作差
- 将Jquery UI与AngularJS一起使用的优点和缺点是什么?
- AngularJS - 将then()与$http服务一起使用
- 将 Json 文件存储在 AngularJS 变量中,以便与“ng-repeat”一起使用
- 将ng个模型加在一起angularjs