AngularJs更新$ interval延迟时间

时间:2015-01-27 20:41:21

标签: angularjs

我的HTML代码是:

<select ng-model='refresh_rate' ng-change="onRefreshRateChange()">
    <option value='10000'>10</option>
    <option value='30000' selected>30</option>  
    <option value='60000'>60</option>
    <option value='180000'>180</option>
    <option value='300000'>300</option>
</select>

在我的角度控制器中是:

var intervaL = $interval(function(){
    //[here]
    //after run every times i want update delay to $scope.refresh_rate
}, $scope.refresh_rate);

在顶部代码中查看此行: //这里我想要更新延迟时间到$ scope.refresh_rate

现在我想要一个放置它的代码而不是这一行

2 个答案:

答案 0 :(得分:6)

要更改$interval费率,您需要停止一个$interval并启动另一个。

如果没有详细说明最后$interval来电是应该立即解雇还是取消 - 我会让您自己处理 - 您可以执行以下操作:

var p = $interval(doSomething, $scope.refresh_rate);

$scope.$watch("refresh", function(){
  $interval.cancel(p);
  p = $interval(doSomething, $scope.refresh_rate);
});

function doSomething(){
  //...
}

plunker

修改

您当然可以在onRefreshRateChange而不是$scope.$watch中执行此操作。不同之处在于您是否愿意在$scope.refresh_rate之外更改<select> - 这是您使用$watch而不仅仅是为了响应<select>

答案 1 :(得分:2)

使用$ timeout循环。

function loop(fn) {
    $timeout(function() {
        if (!$scope.stopBefore) {
            fn();
            $scope.stopAfter || loop(fn);
        }
    , $scope.refresh);
}
loop(doSomething);