我的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
现在我想要一个放置它的代码而不是这一行
答案 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(){
//...
}
修改强>:
您当然可以在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);