Javascript 尝试将带有全局变量的$interval转换为函数
我有一个代码,我想用不同的属性重复几次 我使用的是AngularJS中的$interval,无法将代码段转换为函数。下面我将发布这两个代码,没有函数的代码和我尝试使用函数但给出错误的代码 原始代码Javascript 尝试将带有全局变量的$interval转换为函数,javascript,angularjs,Javascript,Angularjs,我有一个代码,我想用不同的属性重复几次 我使用的是AngularJS中的$interval,无法将代码段转换为函数。下面我将发布这两个代码,没有函数的代码和我尝试使用函数但给出错误的代码 原始代码 $scope.alarm.times.armed_away.pending_time = null; var pendingTime; var promiseAlarmPendingTime; $scope.alarm.times.armed_away.pending_time = entity.a
$scope.alarm.times.armed_away.pending_time = null;
var pendingTime;
var promiseAlarmPendingTime;
$scope.alarm.times.armed_away.pending_time = entity.attributes.armed_away_pending_time;
promiseAlarmPendingTime = $interval(function(){
if($scope.alarm.times.armed_away.pending_time >= 0) {
$scope.alarm.times.armed_away.pending_time -= 1;
if($scope.alarm.times.armed_away.pending_time > 10) {
playSound('audio/alarm_pending_time_1.mp3');
} else if($scope.alarm.times.armed_away.pending_time > 0) {
playSound('audio/alarm_pending_time_2.mp3');
} else if($scope.alarm.times.armed_away.pending_time == 0){
$interval.cancel(promiseAlarmPendingTime);
}
} else {
$scope.alarm.times.armed_away.pending_time = null;
$interval.cancel(promiseAlarmPendingTime);
promiseAlarmPendingTime = null;
}
}, 1000);
我的努力使它与功能一起工作
promiseAlarmPendingTime = $interval($scope.fnAlarmPendingTime(
$scope.alarm.times.armed_away.pending_time,
promiseAlarmPendingTime), 1000);
$scope.fnAlarmPendingTime = function(pendTime, promise){
if(pendTime >= 0) {
pendTime -= 1;
if(pendTime > 10) {
playSound('audio/alarm_pending_time_1.mp3');
} else if(pendTime > 0) {
playSound('audio/alarm_pending_time_2.mp3');
} else if(pendTime == 0){
$interval.cancel(promiseAlarmPendingTime);
}
} else {
pendTime = null;
$interval.cancel(promise);
promise = null;
}
};
该函数自身重复1次,然后给出一个错误:
TypeError: f is not a function
我还尝试删除函数中的整个代码,但出现了相同的错误。可能是语法问题?您有两个选择: 1) 调用调用您的函数并传递参数的函数。
2) 在
$interval
调用中传递参数
$interval
具有以下签名:$interval(函数、延迟、[count]、[invokeApply]、[parameters])
。您已经知道函数
和延迟
是什么-计数
,如果设置为正非零数,则间隔应运行的次数invokeApply
将函数
包装(或不包装)在$scope.$apply()
中,以便您可以控制脏模型检查,脏模型检查是导致视图更新的原因。最后,参数
是要传递给函数的参数
示例1
angular.module('app',[])
.controller('ctrl',函数($interval,$scope){
$scope.counter=0;
让promise=$interval(()=>incrementCounter(promise),1000);
函数递增计数器(承诺){
$scope.counter++;
如果($scope.counter==10){
$interval.取消(承诺);
}
}
});代码>
计数器:{{Counter}}
调用$interval
的是函数的结果,而不是函数本身。第一个参数必须是函数,而不是函数的返回。我如何实现这一点?我很困惑哇,第一个例子。谢谢但是在我的代码中传递的第一个变量是动态的,可以是一个或另一个,然后在函数中我需要更改该变量,而不是将值存储在函数中。不同的变量名称可以是:$scope.alarm.times.armed_away.pending_time或$scope.alarm.times.armed_away.trigger_time等。我希望在函数中设置传递的变量而不是pendTime。在$interval
的每次迭代中调用该函数,因此,如果传递的参数发生更改,将传递更新的值。但是,如果它们是$scope
级别的变量,为什么还要将它们传递给函数呢?我声明$scope.pendTime(示例)为60,并将其传递给函数,函数将每秒从该变量中减去1,直到它达到0。一旦将其作为参数传递,它将成为该函数的局部变量。如果您想要更新$scope.pendTime
,那么甚至不要将其作为参数传递。只需在函数中直接访问它。