我正在编写一个函数,它将以一段时间间隔迭代一个数组。
eg:arr=[1,2,3,4,5,6,7]
我想用角度间隔显示每个元素。
$interval(step,5000,7);
function step(i){
console.log(arr[i]);
}
所以它会以5秒的间隔输出数组内的数字。如何将参数传递给函数?感谢。
答案 0 :(得分:1)
您也可以这样做:
var arrOrig =[1,2,3,4,5,6,7],
arr = angular.copy(arrOrig), //if you want it for later
cancelPromise = $interval(step, 5000);
function step() {
console.log(arr.shift()); //take out the item from top of array
if (!arr.length) { //once array runs out
$interval.cancel(cancelPromise); //cancel interval
}
}
var arr = [1, 2, 3, 4, 5, 6, 7];
var $interval = angular.injector(['ng']).get('$interval');
var cancelPromise = $interval(step, 5000);
function step() {
console.log(arr.shift());
if (!arr.length) {
$interval.cancel(cancelPromise);
}
}

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
&#13;
答案 1 :(得分:0)
var i=0;
$interval(function(){
step(i);
i++
},5000);
function step(i){
console.log(arr[i]);
}
答案 2 :(得分:0)
arr.forEach(function (number, idx) {
$timeout(function () {
console.log(number);
}, 5000 * (idx + 1));
});
您希望使用$timeout
而不是$interval
,因为调用$interval
会为每个号码设置一个时间间隔,但它不会停止,直到它为止明确清除。
答案 3 :(得分:0)
此代码将一次显示一个数字,重复:
var getNextNumber = (function(){
var i = 0;
var numbers = [1,2,3,4,5,6,7];
return function(){
if(i >= numbers.length){
i = 0;
}
return numbers[i++];
};
})();
$interval(function(){
var number = getNextNumber();
console.log(number);
},5000);
请参见此工作jsfiddle。
如果您只想显示一次,请使用其中一个答案中的$timeout
解决方案之一。 $interval
就是无限期地重复某些命令,而$timeout
更多的是将来执行一次命令。有关详情,请参阅this answer。