我試圖在服務函數的返回值更改時更新scope
。從閱讀,這聽起來像我應該使用$watch
,但以下角度docs在我的應用程序創建一個無限$digest
循環,這裏的控制器:
.controller('navCtrl', function(CookieHandler, $scope){
// this works, but doesn't update when CookieHandler.get() changes
// $scope.user = CookieHandler.get();
$scope.$watch(
function() {return CookieHandler.get()},
function(newValue, oldValue) {
if(newValue !== oldValue) {
$scope.user = newValue
}
}
)
//etc
從錯誤消息,還有一些關於使用$觀看函數返回一個數組,但CookieHandler.get()
返回一個對象?
我看了看周圍的一些更讀,我應該使用的$apply
代替$watch
這裏,因爲它更容易測試,所以我想這:
.controller('navCtrl', function(CookieHandler, $scope){
// this works, but doesn't update when CookieHandler.get() changes
// $scope.user = CookieHandler.get();
$scope.$apply(function(scope){
scope.user = CookieHandler.get();
})
})
但是,這將引發對消化週期的誤差已經在運行。有沒有辦法解決我的$watch
停止無限循環? CookieHandler.get
只是檢查值$cookieStore
當您從角度已知事件之外更新範圍時,使用'$ apply'。它強制摘要 – charlietfl