我有一个Angular控制器,我有一些设置代码,我只想触发一次。所以我把代码放在控制器里面。但由于某种原因,我可以看到代码被执行多次。
.controller('MyController', function ($rootScope, $scope, $compile, $http, $filter, $q, MyService) {
alert('should be fired only once!');
我认为罪魁祸首是在closeTimes函数中,它基本上隐藏了计时器之后的时间html控件。
$scope.closeTimes = function() {
// create a promise to fire a function when this animation finishes
var deferred = $q.defer();
var element = document.querySelector(".time-box");
var innerElement = document.querySelector(".inner");
// animate the box closed
move(element)
.ease('ease-out-cubic') //used by animate.css
.set('height', '0px')
.duration('.25s')
.end();
move(innerElement)
.ease('ease-out-cubic')
.set('height', '0px')
.duration('.25s')
.end(function () {
element.remove();
deferred.resolve();
});
// return promise
return deferred.promise;
};
closeTimes使用承诺如下:
$scope.closeTimes().then(function() {
// // now show the new selected date
$scope.openTimes(selectedSlot);
});
出于某种原因,当我调用closeTimes函数时,它会自动调用alert('应该只被触发一次!');码。为什么要再次初始化代码。