如何在AngularJS上应用延迟

Rit*_*ita 27 javascript angularjs

我使用下面的代码,在laravel刀片

<div ng-show="displayErrorMsg" class="form-group m-b alert alert-danger">{{errorMsg}}
Run Code Online (Sandbox Code Playgroud)

在angularjs控制器中

$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);
Run Code Online (Sandbox Code Playgroud)

消息在2秒后自动消失,如给定的那样.

但是当我简单地说出警告("测试"); 或点击任何地方消息消失.如何解决这个问题?

ctr*_* f5 45

只需注入$timeout您的控制器并使用它.

$timeout(function() { $scope.displayErrorMsg = false;}, 2000);
Run Code Online (Sandbox Code Playgroud)

您也可以使用$ digest或$ apply,如下所示

setTimeout(function() {
    $scope.displayErrorMsg = false;
    $scope.$digest();
}, 2000);

setTimeout(function () {
  $scope.$apply(function(){
      $scope.displayErrorMsg = false;
  });
}, 2000);
Run Code Online (Sandbox Code Playgroud)

检查这些是如何工作的,

http://www.sitepoint.com/understanding-angulars-apply-digest/


Alm*_*pos 8

我通常需要一个功能,无论出于何种原因等待一点,仅用于测试目的.在Java中,我们可以使用Thread.sleep().但是,在JavaScript中我更喜欢使用我在这里找到的简单函数:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它在包括AngularJS在内的几种场景中一直在为我工作.但是,请记住,除非您确切知道自己在做什么,否则不应在生产环境中使用该功能.