我是Angular的初學者。我堅持以角度js更新$ scope變量。我創建了一個服務名稱「Main」,我想用它來更新我的$ scope.token。我已經使用$ scope.apply和$ scope.digest但收到以下錯誤:使用角度js服務更新範圍變量
> Error: [$rootScope:inprog] $apply already in progress
> http://errors.angularjs.org/1.4.4/$rootScope/inprog?p0=%24apply
> at angular.js:68
> at beginPhase (angular.js:16273)
> at Scope.$apply (angular.js:16014)
> at new <anonymous> (controllers.js:11)
> at Object.invoke (angular.js:4473)
> at extend.instance (angular.js:9093)
> at nodeLinkFn (angular.js:8205)
> at compositeLinkFn (angular.js:7637)
> at compositeLinkFn (angular.js:7641)
> at publicLinkFn (angular.js:7512)
以下是代碼片段。
的index.html
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a ng-href="#/">Home</a></li>
<li data-ng-show="token"><a ng-href="#/me">Me</a></li>
<li data-ng-hide="token"><a ng-href="#/signin">Signin</a></li>
<li data-ng-hide="token"><a ng-href="#/signup">Signup</a></li>
<li ><a data-ng-show='true' ng-click="logout()">Logout</a></li>
</ul>
</div>
services.js
'use strict';
angular.module('angularRestfulAuth')
.factory('Main', ['$http', '$localStorage','$cookies', function($http, $localStorage,$cookies){
return {
tokShowhide: function(data) {
if($cookies.get('sid')!=undefined)
return true;
else
return false;
}
};
}]);
在controllers.js
$scope.$apply(function() {
$scope.token = Main.tokShowhide();
});
How do I update $scope variable and reflect its change in my view (index.html) ??
使用Angular本身時,不需要使用'apply()'。只有在使用不支持Angular的異步事件(本地DOM事件,不帶'$ http的Ajax等)時才需要它。 –
解釋爲什麼你認爲你需要'apply()'。如果你設置了cookie,沒有什麼會改變這個值 – charlietfl
也許你可以使用'$ timeout' – geckob