[英]Angular update scope from event
我有一個角度服務,用於管理應用程序的身份驗證。 和一個控制器。
用戶登錄和注銷時,服務會在$rootScope
上觸發偶數。
我想更新UI中的DOM元素,因此它會根據用戶狀態顯示“登錄”或“注銷”。
請注意,我的Angular知識(尤其是關於事件的知識)不是很好,所以請隨時給我有關最佳做法的建議。
這是我當前的代碼。
app.service('AuthenticationService', function ($rootScope) {
var _loggedIn = "false";
this.login = function (email, password) {
if (!email || !password) return 1;
else {
_loggedIn = "true";
// broadcast on root scope, so anyone can listen
$rootScope.$broadcast("loginChanged", 1);
return 0;
}
};
this.logout = function (email, password) {
_loggedIn = "false";
// broadcast on root scope, so anyone can listen
$rootScope.$broadcast("loginChanged", 0);
}
/*other functions ommited*/
});
在我的控制器中
var addListener = function () {
listener = $scope.$on("loginChanged", function (e, loggedIn) {
$scope.loginButton.text = loggedIn ? "Log Out" : "Log In";
$scope.loginButton.link = loggedIn ? "#/logout" : "#/login";
console.log("loginChanged: " + loggedIn);
}); // $on returns a registration function for the listener
};
問題是,盡管$ scope更新未反映在UI中,但console.log(...)
工作正常。 我嘗試將其包裝在$scope.$apply
,導致出現錯誤,指出apply已在進行中。
如何從事件更新UI? 是否有更好/更標准的方法來實現相同目標?
提前致謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.