Подтвердить что ты не робот

Как применить задержку на AngularJS

Я использую код ниже, в ларавом лезвии

<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 секунды автоматически, как указано.

Но когда я просто ставил предупреждение ( "тест" ); или щелчок в любом месте исчезает. Как решить эту проблему?

4b9b3361

Ответ 1

Просто введите $timeout в свой контроллер и используйте это.

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

Также вы можете использовать $digest или $apply, как показано ниже

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

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

Проверьте, как это работает,

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

Ответ 2

Пример 1: setTimeout

var timerCount = function() {
    setTimeout(function () {
        $scope.displayErrorMsg = false;
        $scope.$apply(timerCount);
    }, 2000);
}

Пример 2: $timeout

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

Ответ 4

вы можете ввести $timeout. Angular warapper window.setTimeout метод.

попробуйте следующее: -

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

структура $timeout равна synatx: - $ Тайм-аут (п, задержка, invokeAny, проход)

fn- функция, которую вы хотите отложить

delay: - время продолжительности

invokeAny: - он будет устанавливать false по умолчанию, иначе он вызовет функцию fn в $apply block

pass: - это необязательный параметр для выполнения функции.

Другой подход: -

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

метод setTimeout заканчивается Angular Контекст, поэтому нам нужно вызвать $apply, который вызовет цикл $digest, потому что, если мы обновляем $scope внутри setTimeout Angular, нужно знать, что $scope становится грязным.

Ответ 5

Мне обычно нужна функция, чтобы подождать немного по какой-либо причине, только для целей тестирования. В 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;
    }
  }
}

Он работал у меня в нескольких сценариях, включая AngularJS. Но, пожалуйста, помните, что функция не должна использоваться в производственных средах, если вы точно не знаете, что делаете.

Ответ 6

setTimeout - это метод оконного объекта. Поэтому, чтобы получить доступ к этой функции, добавьте $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

Улучшенное решение 1:

$scope.errorMsg = "Data Empty";
$scope.displayErrorMsg = true;
if (timer) $timeout.cancel(timer); // restart counter
timer = setTimeout(function() { $scope.displayErrorMsg = false;}, 2000);

Решение 1:

Вы можете использовать $timeout:

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

Решение 2:

С setTimeout:

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