【问题标题】:How to get values of reactive form inputs in Angular?如何在 Angular 中获取响应式表单输入的值?
【发布时间】:2018-12-06 22:22:18
【问题描述】:

我需要获取响应式表单输入 emailpassword 并将它们传递给我的函数,该函数调用注册服务方法以使用电子邮件在 firebase 中注册新用户。不幸的是,在表单提交后的 chrome 控制台中,我得到了RegisterComponent.html:2 ERROR ReferenceError: email is not defined

我的代码现在看起来像这样:

register.component.ts

export class RegisterComponent {
  form: FormGroup;

  constructor(fb: FormBuilder, private authService: AuthService) {
    this.form = fb.group({
  email:['',Validators.required ],
  password:['',Validators.compose([Validators.required,
    PasswordValidator.cannotContainSpace])]
    })
    email = this.form.controls['email'].value;
    password = this.form.controls['password'].value;
   }


   signInWithEmail() {
     this.authService.regUser(this.email, this.password);
   }
}

我的 AuthService 文件:

 regUser() {
    firebase.auth().createUserWithEmailAndPassword(email, pass)
 .catch(function(error) {
   // Handle Errors here.
   var errorCode = error.code;
   var errorMessage = error.message;
   // ...
 });
console.log(this.form.controls['email'].value);
    }

这只是我与问题相关的代码的一部分。我不包括注册表,因为它又大又乱,所以我认为您不需要查看它。提前致谢。

编辑:

register.component.html

<div class="container">
<form [formGroup]="form" (ngSubmit)="signInWithEmail()">
    <div class="form-group">
       <label for="email">Email</label>
        <input type="email" class="form-control" formControlName="email">
       <div *ngIf="form.controls.email.touched
        && !form.controls.email.valid" class="alert alert-danger">
            Email is required
       </div>
    </div>
    <div class="form-group">
    <label for="password">Password</label>
    <input type="password" class="form-control" formControlName="password">
    <div *ngIf="form.controls.password.touched && form.controls.password.errors">
        <div *ngIf="form.controls.password.errors.invalidLogin"
class="alert alert-danger">
            Email or password is invalid.
        </div>
        <div *ngIf="form.controls.password.errors.required"
class="alert alert-danger">
            Password is required.
        </div>
        <div *ngIf="form.controls.password.errors.cannotContainSpace"
class="alert alert-danger">
            Password cannot contain space.
        </div>
    </div>
</div>

    <button class="btn btn-primary" type="submit">Register</button>

</form>
</div>

【问题讨论】:

标签: angular firebase firebase-authentication angular-services angular-reactive-forms


【解决方案1】:

您可以通过以下方式获得反应式表单的价值:

signInWithEmail() {
     const formValue = this.form.value;
     this.authService.regUser(formValue.email, formValue.password);
}

顺便说一句,我认为您应该在服务中调整 regUser 方法参数,使其同时采用这两个参数:

您的服务

regUser(email, pass) {
    firebase.auth().createUserWithEmailAndPassword(email, pass)
 .catch(function(error) {
   // Handle Errors here.
   var errorCode = error.code;
   var errorMessage = error.message;
   // ...
 });
    }

【讨论】:

  • 不起作用。得到同样的错误formValue is not defined。更新到您的代码并更改身份验证服务中的 regUser 以采用相同的参数 formValue.emailformValue.password
  • 使用注册组件模板更新了 OP
  • 你的程序在哪里抛出错误? ...你的regUser() { 应该有两个参数
  • 我刚刚犯了一个 SS 错误。我的身份验证服务看起来像这样regUser() { firebase.auth().createUserWithEmailAndPassword(formValue.email, formValue.password)
  • 不..您不能将 formValue 直接传递到您的服务中..我编辑了我的帖子...您应该将您的regUser() 更改为regUser(email, pass) ..然后firebase.auth().createUserWithEmailAndPassword(email, pass)..
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 2012-06-05
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多