如何在角度间隔中向函数添加参数

时间:2015-05-19 20:26:56

标签: angularjs

我正在编写一个函数,它将以一段时间间隔迭代一个数组。

eg:arr=[1,2,3,4,5,6,7]

我想用角度间隔显示每个元素。

$interval(step,5000,7);
function step(i){
    console.log(arr[i]);
}

所以它会以5秒的间隔输出数组内的数字。如何将参数传递给函数?感谢。

4 个答案:

答案 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;
&#13;
&#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