【发布时间】:2016-09-05 23:45:33
【问题描述】:
我刚刚开始学习 Angular 2 和 Firebase,但遇到了一个基本问题。
我正在使用 Firebase createUserWithEmailAndPassword 方法注册一个使用 HTML 表单数据的新用户帐户,该数据存储在自定义登录类中,然后通过该方法。
这可行,但我不知道如何将我在错误对象中获得的任何错误数据传输到我的 HTML 模板中进行显示。我已将变量添加到登录类,但我无法在 createUserWithEmailAndPassword 方法中访问它。
我知道这可能是一些基本的东西,但任何帮助都会非常有用。谢谢!
LoginComponent.ts
import { Component } from "@angular/core";
import { Router } from "@angular/router";
import { Login } from "./login";
@Component({
selector: 'login-component',
templateUrl: 'app/login/login.component.html',
styleUrls:[
'app/login/login.component.css'
]
})
export class LoginComponent{
login = new Login('James', 'SuperSecret', false, '');
submitted = false;
onSubmit(){this.submitted= true};
active = true;
newUser(){
firebase.auth().createUserWithEmailAndPassword(this.login.email, this.login.pswd).catch(function(error) {
if(error){
console.log('The error code: ' + error.code + '\nThe error message' + error.message);
this.login.error = true;
this.login.errorMsg = error.message;
}else{
this.login.error=false;
this.login.errorMsg='';
}
});
}
}
LoginComponent.html
<div class="container">
<div [hidden]="submitted">
<h1>Login Form</h1>
<form *ngIf="active" (ngSubmit)="onSubmit()" #loginForm="ngForm">
<!-- Email Input -->
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" required
[(ngModel)]="login.email" name="email" #email="ngModel">
<div [hidden]="email.valid || email.pristine"
class="alert alert-danger">
Email is required
</div>
</div>
<!-- Password Input -->
<div class="form-group">
<label for="pswd">Password</label>
<input type="password" class="form-control" id="pswd" [(ngModel)]="login.pswd" name="pswd" required>
<!-- EXAMPLE ERROR DISPLAY -->
<div [hidden]="!login.error" class="alert alert-danger">{{login.errorMsg}}</div>
</div>
<!-- Submit Buttons -->
<button type="submit" class="btn btn-default" [disabled]="!loginForm.form.valid">Login</button>
<button type="button" class="btn btn-default" (click)="newUser()">Register</button>
</form>
</div>
</div>
Login.ts(登录类)
export class Login{
constructor(
public email: string,
public pswd: string,
public error: boolean,
public errorMsg: string
){}
}
【问题讨论】:
-
如果我在 .catch() 之后添加一个 .then() 方法,我就能够与登录对象交互。为什么我不能在 .catch 匿名函数中访问它?
标签: angular typescript firebase firebase-realtime-database firebase-authentication