У меня есть приложение angularJS, которое включает функции входа в систему, используемые в бэкэнд с помощью экспресс-паспорта; это до недавнего времени работало нормально, но я изменил некоторые вещи, и теперь он не работает, и я не знаю, как исправить свою проблему.angularJS область действия не обновляется после HTTP get
После входа на страницу входа вы должны быть перенаправлены к индексу и переменной $ scope.cUser.userName должно быть ваше текущее имя пользователя, однако страница не обновляет область для имени пользователя, пока я не обновляю (f5) всю страницу! Интересно, что значение $ scope.cUser.created делает обновление и корректно отображать на странице .. Я могу подтвердить, что экспресс-доставку правильно имени пользователя для угловых в формате JSON
метода Войти в контроллере входа:
$scope.login = function(){
$http.post('/users/login', {
username: $scope.user.username,
password: $scope.user.password
})
.success(function(user){
toaster.pop('success', "Success!", "You have been logged in");
$rootScope.$broadcast('loggedIn', user);
$location.path('/');
})
.error(function(user){
toaster.pop('error', 'We couldn\'t log you in!', 'The provided user credentials are incorrect');
$location.url('/login');
});
};
проверить, если войти в систему на приложение запуска:
$http.get('/users/loggedin').success(function(user){
if (user.loggedin !== false){
$rootScope.$broadcast('loggedIn', user);
} else {
$rootScope.$broadcast('loggedOut');
}
});
и это мой «mainController», которая действует на весь сайт за пределами нг ракурса:
$scope.cUser = {};
$scope.$on('loggedIn', function(event, user){
$timeout(function(){
$scope.$apply(function(){
$scope.cUser.loggedIn = true;
$scope.cUser.userName = user.username;
$scope.cUser.created = user.created;
});
});
});
$scope.$on('loggedOut', function(event){
$scope.cUser.loggedIn = false;
$scope.cUser = {};
$scope.$apply();
});
Функция выхода из системы работает должным образом, но имя $ scope.cUser.userName не отображается на странице! Пожалуйста помоги!
не использовать '$ scope. $ Apply();' он может разорвать выполнение, если '$ apply' уже выполняется .try' if (! $ Scope. $$ phase) $ scope. $ Apply(); ' –
Вы можете создать плункер или jsfiddle, реплицируя проблему? – SoluableNonagon
@pankajparkar, это так же бессмысленно, так как в любом случае это «тайм-аут», что само по себе было так же бессмысленным, поскольку событие запускается изнутри Angular в обработчике успеха. Таким образом, все как применение, так и таймаут бессмысленны и являются довольно распространенным анти-шаблоном в Angular. –