Я узнал что-то странное. Пожалуйста помоги!
$scope.login = function() {
ref.authWithPassword({
email: $scope.user.email,
password: $scope.user.password
}, function(error, authData) {
if (error) {
console.log("Login Failed!", error);
$scope.message = error.toString();
} else {
$location.path('/meetings');
console.log("Authenticated successfully with payload:", authData);
}
});
} //login
Это функция входа в систему, и она работает хорошо. Однако дело в том, что я получаю error
3, 4 секунды после отправки логина. Я заметил, что мое {{message}}
не обновляется сразу после получения значения в $scope.message
. Я думал, что Angular должен показать эту ценность, как только она изменится. ?
После того, как я нажимаю второй раз, я получаю сообщение об ошибке.
Здесь я печатаю значение:
<p class="error formerror" ng-show="message">{{message}}</p>
Вы вызываете authWithPassword
, который является частью обычного SDK Firebase. Этот API запустит процесс аутентификации и вызовет вашу функцию после завершения проверки подлинности. К сожалению, в этот момент AngularJS больше не знает о каких-либо обновлениях, которые вы вносите в $scope
.
Чтобы уведомить AngularJS об обновлении, заверните свой код в $timeout
:
$scope.login = function() {
ref.authWithPassword({
email: $scope.user.email,
password: $scope.user.password
}, function(error, authData) {
$timeout(function() {
if (error) {
console.log("Login Failed!", error);
$scope.message = error.toString();
} else {
$location.path('/meetings');
console.log("Authenticated successfully with payload:", authData);
}
});
});
} //login
Обратите внимание, что именно по этой причине AngularFire предоставляет удобные обертки вокруг этих функций аутентификации в своей службе $firebaseAuth
. См. Раздел в руководстве AngularFire о регистрации пользователей.
Функция обертки, которую вы ищете, является $authWithPassword
, читайте пример использования $authWithPassword
в документации по API.