我正在使用下面的代码,在laravel blade
<div ng-show="displayErrorMsg" class="form-group m-b alert alert-danger">{{errorMsg}}
在angularjs控制器中
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
消息不会在给定后自动消失2秒。
但是当我简单地提出警告时(&#34; test&#34;);或点击任何地方消息消失。 如何解决这个问题?
答案 0 :(得分:41)
只需在控制器中注入someprop
并使用它。
$timeout
您也可以使用$ digest或$ apply
$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
检查这些是如何工作的,
http://www.sitepoint.com/understanding-angulars-apply-digest/
答案 1 :(得分:7)
我通常需要一个功能,无论出于何种原因等待一点,仅用于测试目的。在Java中,我们可以使用Thread.sleep()。但是,在JavaScript中,我更喜欢使用我发现here的简单函数:
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
在一些场景中,它一直在为我工作,包括AngularJS。但是,请记住,除非您确切知道自己在做什么,否则不应在生产环境中使用该功能。
答案 2 :(得分:4)
示例1:setTimeout
var timerCount = function() {
setTimeout(function () {
$scope.displayErrorMsg = false;
$scope.$apply(timerCount);
}, 2000);
}
示例2:$ timeout
$timeout(function() {
$scope.displayErrorMsg = false;
}, 2000);
答案 3 :(得分:2)
尝试使用角度超时,以获得更多https://docs.angularjs.org/api/ng/service/$timeout
或How to change value after delay by using angularjs?
$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
答案 4 :(得分:2)
你可以注入$ timeout。 Angular的warapper window.setTimeout方法。
试试这个: -
$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
$ timeout的结构是 synatx: - $超时(FN,延迟,invokeAny,通)
fn-你要延迟的功能
延迟: - 持续时间
invokeAny: - 默认情况下会设置为false,否则会在$ apply block中调用函数fn
传递: - 执行该功能是可选参数。
另一种方法: -
setTimeout(function () {
$scope.$apply(function(){
$scope.displayErrorMsg = false;
});
}, 2000);
setTimeout方法用完了Angular Context所以我们需要调用$ apply来调用$ digest循环,因为如果我们在setTimeout中更新$ scope,Angular需要知道$ scope变脏了。
答案 5 :(得分:2)
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
if (timer) $timeout.cancel(timer); // restart counter
timer = setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
您可以使用$timeout:
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
使用setTimeout:
setTimeout(function () {
$scope.$apply(function(){
$scope.displayErrorMsg = false;
});
}, 2000);
答案 6 :(得分:1)
setTimeout是window对象的方法。因此,为了访问此功能,在控制器中注入 $ window 。
然后你可以调用任何方法,如alert,confirm,setTimeout,setInterval等。
详情https://docs.angularjs.org/api/ng/service/$window
然后你可以写
$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
$window.setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
答案 7 :(得分:0)
同步解决方案:
const sleep = ( ms ) => {
const end = +(new Date()) + ms;
while( +(new Date()) < end ){ }
}
示例:强>
(function() {
console.log(+(new Date())); // 1527837689811
sleep(1000);
console.log(+(new Date())); // 1527837690813
sleep(2000);
console.log(+(new Date())); // 1527837692814
sleep(3000);
console.log(+(new Date())); // 1527837695814
sleep(4000);
console.log(+(new Date())); // 1527837699814
sleep(5000);
})();