В моей директиве agnularjs есть объект, содержащий логику некоторого сценария
$scope.slider = {
increment: 0,
step: 1,
positionTop: 0,
init: function (step, isClick) {
if(isClick) clearInterval($scope.interval);
...rest of script...
и ниже, после закрытия $scope.slider
(}
) у меня есть этот код
$timeout(function () {
$scope.slider.changeSlide($scope.slider.step);
$scope.interval = setInterval(function () {
$scope.slider.step++;
if($scope.slider.step === 5) $scope.slider.step = 1;
$scope.slider.changeSlide($scope.slider.step);
}, 5000);
});
При загрузке страницы я начинаю init
метод работы, а затем, когда пользователь дополнительно нажимает этот HTML-тег
<span class="main__last-added-dot"
data-ng-class="slider.step == 1 ? 'main__last-added-dot--active' : ''"
data-ng-click="slider.init(1, true);"></span>
, он очищает интервал, что означает, что он перестает работать, и я не устанавливаю новыйинтервал, потому что я не знаю как.Я использую angularjs $ timeout для запуска интервала, потому что div, над которым я работаю, собирается в бэкэнд-вызове, поэтому мне нужно дождаться их.
Я попытался присвоить интервал другой переменной области ивызовите его внутри
в методе init внутри $scope.slider
объекта:
$timeout(function(){ $scope.startInterval() });
ниже $scope.slider
объекта:
$timeout(function () {
$scope.startInterval = function() {
$scope.interval = setInterval(function () {
console.log('fire function interval');
$scope.slider.step++;
if($scope.slider.step === 5) $scope.slider.step = 1;
$scope.slider.changeSlide($scope.slider.step);
}, 5000);
};
$scope.startInterval();
});
Но это создаст какой-тоцикл Я действительно не знаю, что он работал очень странно.
Что я делаю неправильно, как остановить этот интервал и запустить его снова, после щелчка пролета я хочу сбросить секунды до 0 ..
Я добавляю демо .