Как применить задержку на 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 секунды автоматически, как указано.
Но когда я просто ставил предупреждение ( "тест" ); или щелчок в любом месте исчезает.
Как решить эту проблему?
Ответы
Ответ 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);
Ответ 3
попробуйте использовать angular timeout, для более https://docs.angularjs.org/api/ng/service/$timeout
или Как изменить значение после задержки с помощью angularjs?
$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);