我有一個角度的服務,管理認證到應用程序。還有一個控制器。角度更新範圍從事件
服務在用戶登錄和註銷時甚至在$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
};
問題是console.log(...)
工作正常,雖然$範圍更新未在UI反映。我試圖將其包裝在$scope.$apply
中,這在導致錯誤中表示應用已在進行中。
如何從事件更新UI?有沒有更好的/更標準的方法來實現相同?
在前感謝
提供演示覆制問題。聽起來像可能有一些嵌套,可能會導致範圍繼承問題。沒有標記很難提供幫助。如果日誌正在工作......問題在其他地方 – charlietfl
顯示如何在HTML中嵌入'loginButton'變量 – Chandermani
登錄按鈕爲HTML格式,因爲此爲 '' – Madushan