У меня есть угловая служба, которая управляет аутентификацией приложения. И контроллер.Область углового обновления от события
сервис срабатывает даже на $rootScope
, когда пользователь входит в систему и выходит из системы.
Я хочу обновить элемент DOM в своем пользовательском интерфейсе, поэтому он отображает «Вход» или «Выход» в зависимости от состояния пользователя.
Обратите внимание, что мое Угловое знание, особенно вокруг событий, не очень хорошее, поэтому, пожалуйста, не стесняйтесь давать мне советы о лучших практиках.
Вот мой текущий код.
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(...)
работает отлично, хотя обновление $ область не отражается в пользовательском интерфейсе. Я попробовал обернуть его в $scope.$apply
, который вызвал ошибку, заявив, что применение уже выполняется.
Как обновить пользовательский интерфейс от события? есть ли лучший/более стандартный способ добиться того же?
Thanks In Advance
предоставить демоверсию, которая реплицирует проблему. Похоже, что может быть какая-то вложенность, которая может вызвать проблему наследования сферы. Трудно помочь без разметки. Если журнал работает ... проблема в другом месте – charlietfl
Покажите, как вы интегрируете переменную 'loginButton' в HTML – Chandermani
. Кнопка входа находится в HTML как это ' {{loginButton.text}} ' – Madushan