2016-08-04 60 views
1

我在angular.js控制器中使用了setInterval()函數來稍後在UI上顯示定時器。創建一個範圍變量,其值在幾秒鐘內處於非活動狀態。window.setInterval()在angular.js中無法正常工作

setInterval(function(){ scope.timer++ }, 1000); 

它應該做的是,它應該每秒更新一次屏幕。但事實並非如此。有一段時間它會在兩秒鐘後更新屏幕,三秒鐘,並且每秒更新一次,但不一致。 而我登錄的範圍。計時器值的行爲正確。

這會是什麼問題。 angular.js是否以某種方式限制原生JavaScript或什麼? enter image description here

+0

有關其他參考:https://www.sitepoint.com/understanding-angulars-apply-digest/ –

回答

0

使用範圍。$應用

setInterval(function(){ scope.timer++; scope.$apply(); }, 1000); 

的setInterval是沒有棱角功能,使範圍不清爽。

或者用角服務(者優先的解決方案):

+0

我相信使用$間隔首選,建議不是做$適用於這種情況下 –

+0

Yee @GopinathShiva感謝評論我更新了答案 –

+0

欣賞:) –

0

可能的值更新在controller但不是在DOM 試試這個

JS

setInterval(function(){ 
scope.timer++ 
setTimeout(function(){ 
    $scope.$apply(); 
}, 1); 
}, 1000); 

或者您可以使用$interval並且您正在遵循我的回答y您可以同時使用$timeout代替的setTimeout也

0

您應該使用$interval

更新您的代碼以這種

$interval(function(){ 
    $scope.timer++; 
}, 1000) 

確保您$scope.timer是正確初始化

0

setInterval不是一個角功能,因此範圍不刷新,我不建議使用scope.$apply()作爲其浪費。

使用角度的內置$interval方法:

.controller('ExampleController', ['$scope', '$interval', 
    function($scope, $interval) { 
     stop = $interval(function() { 
      $scope.timer++; 
     }, 1000); 
}); 

文檔:https://docs.angularjs.org/api/ng/service/ $間隔

1

更好是使用$interval,例如:

var app = angular.module('MyApp', []); 
 

 
app.controller('AppCtrl', function($scope, $interval) { 
 
    $scope.timer = 0; 
 
    $interval(function() { $scope.timer++; }, 1000); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 
 

 
<div ng-controller="AppCtrl" ng-cloak="" ng-app="MyApp"> 
 
    <div ng-bind="timer"></div> 
 
</div>

0

您可以嘗試採用了棱角分明的$interval,從docs

你將它添加到您的控制器,並使用它,就像this(查看Plunker)

app.controller('testController', ['$scope', '$interval', function($scope, $interval) { 
    var count = 1; 
    $scope.count = count; 
    $interval(function() { 
    $scope.count++; 
    }, 1000); 
}]); 
0

的setInterval是JS原生功能,來執行它在摘要循環內部,您應該調用apply()方法,或者使用AngularJS文檔中建議的wrapper $ interval。

$interval(function(){ scope.timer++ }, 1000); 

https://docs.angularjs.org/api/ng/service/ $間隔

相關問題