我使用Angular js和firebase。 对于我的登录表单和我的注册表单,我有一个控制器" userController"谁在我的服务userProvider中调用函数。
我想在我的视图中显示firebase错误消息。我的提供商如何向我的控制器发送消息?
我的代码:
userController.js:
$scope.login = function(user){
userProvider.login(user);
}
userProvider.js:
this.login = function(user){
Auth.$authWithPassword({//on connecte l'utilisateur
email: user.email,
password: user.password
}).then(function(authData) {
console.log("Utilisateur connecté:", authData.uid);
$location.path('#/profil');
}).catch(function(error) {
console.error("Echec connexion:", error);
// I want return the error.code for use it in my controller
});
}
login.html:
<form ng-hide="authData" class="form-signin col-md-6" name="loginForm" novalidate >
<h2 class="form-signin-heading">Connexion</h2>
<p style="color:red;" ng-show="userDataError">{{userDataErrorMessage}}</p>
<div class="form-group" ng-class="{ 'has-error' : loginForm.email.$invalid }">
<label for="inputEmail">Email</label>
<input type="email" class="form-control" placeholder="Email address" ng-model="user.email" name="email" ng-required autofocus>
<p class="help-block text-error" ng-show="loginForm.email.$invalid">Cet email n'est pas valide</p>
</div>
<div class="form-group" ng-class="{ 'has-error' : loginForm.password.$invalid }">
<label for="inputPassword">Password</label>
<input type="password" class="form-control" placeholder="Password" ng-model="user.password" ng-minlength="8" name="password" ng-required>
<p class="help-block text-warning" ng-show="loginForm.password.$error.minlength" >Minimum 8 caractères</p>
</div>
<button class="btn btn-lg btn-primary btn-block" ng-disabled="loginForm.$invalid" ng-click="login(user)">Connexion</button>
答案 0 :(得分:0)
首先,对于这些类型的计划,我绝对不会使用提供程序而是服务......所以你可以做些什么来实现向控制器显示错误的问题:
在loginService.js
中app.service('loginService', ["$scope", "Auth", "$firebaseAuth", function($scope,Auth,$firebaseAuth){
var vm= this;
this.login = function(user){
Auth.$authWithPassword({//on connecte l'utilisateur
email: user.email,
password: user.password
})
}
}])
并在Ctrl:
中app.controller('MainCtrl', function($scope){
loginService.login().then(function(authData) {
console.log("Utilisateur connecté:", authData.uid);
$scope.userData = authData.uid;
$location.path('#/profil');
}).catch(function(error) {
console.error("Echec connexion:", error);
$scope.errorLogin = error;
// I want return the error.code for use it in my controller
$scope.loginError = error;
});;
})
答案 1 :(得分:0)
从函数中链,返回派生的承诺。
this.login = function(user){
//return promise
return derivedPromise = (
Auth.$authWithPassword({//on connecte l'utilisateur
email: user.email,
password: user.password
}).then(function(authData) {
console.log("Utilisateur connecté:", authData.uid);
$location.path('#/profil');
}).catch(function(error) {
console.error("Echec connexion:", error);
//throw error to chain
throw error;
});
);
});
在控制器中,使用promise显示错误。
$scope.login = function(user){
userProvider.login(user)
.catch( function onRejected(error) {
$scope.errorMessage = ("Echec connexion:" + error);
});
};
通过返回承诺,可以使用承诺的.then
或.catch
方法检索结果(已完成或已拒绝)。