使用 onsubmit 事件刷新页面来处理 Angular 2 和 Firebase

问题描述 投票:0回答:3

我正在尝试将 Firebase 应用于我昨天找到的 Admin HTML template

在注册页面中,当我单击“登录”时,它会重新加载页面,而不是执行 Firebase

createUserWithEmailAndPass
过程。

这是我的 HTML 代码:

<form [formGroup]="form" (submit)="registrar(form.value)" class="form-horizontal">
  <div class="form-group row" [ngClass]="{'has-error': (!name.valid && name.touched), 'has-success': (name.valid && name.touched)}">
    <label for="inputName3" class="col-sm-2 control-label">Nombre</label>

    <div class="col-sm-10">
      <input [formControl]="name" type="text" class="form-control" id="inputName3" placeholder="Nombre completo">
    </div>
  </div>
  <div class="form-group row" [ngClass]="{'has-error': (!email.valid && email.touched), 'has-success': (email.valid && email.touched)}">
    <label for="inputEmail3" class="col-sm-2 control-label">NIF</label>

    <div class="col-sm-10">
      <input [formControl]="email" type="text" class="form-control" id="inputEmail3" placeholder="NIF/DNI">
    </div>
  </div>
  <div class="form-group row" [ngClass]="{'has-error': (!password.valid && password.touched), 'has-success': (password.valid && password.touched)}">
    <label for="inputPassword3" class="col-sm-2 control-label">Contraseña</label>

    <div class="col-sm-10">
      <input [formControl]="password" type="password" class="form-control" id="inputPassword3" placeholder="Introduce una contraseña">
    </div>
  </div>
  <div class="form-group row" [ngClass]="{'has-error': (!repeatPassword.valid && repeatPassword.touched), 'has-success': (repeatPassword.valid && repeatPassword.touched)}">
    <label for="inputPassword4" class="col-sm-2 control-label"></label>

    <div class="col-sm-10">
      <input [formControl]="repeatPassword" type="password" class="form-control" id="inputPassword4" placeholder="Repite la contraseña">
      <span *ngIf="!passwords.valid && (password.touched || repeatPassword.touched)" class="help-block sub-little-text">Las contraseñas no coinciden.</span>
    </div>
  </div>
  <div class="form-group row">
    <div class="offset-sm-2 col-sm-10">
      <button [disabled]="!form.valid" type="submit" class="btn btn-default btn-auth">Confirmar registro</button>
    </div>
  </div>
</form>

这是我的职能:

nuevoUsuario(email, password) {
        console.log(email);
        return this.af.auth.createUser({
            email: email,
            password: password
        });
 }

public registrar(datos: Object): void {
    this.submitted = true;
    if (this.form.valid) {
      // your code goes here
     const formarCorreo = this.email.value +' @maimona.com';
      console.log(formarCorreo);
       
   this.afService.nuevoUsuario(formarCorreo.toLowerCase, 
       this.password).then((user) => {
          this.afService.saveUserInfoFromForm(formarCorreo.toLowerCase, 
         this.name, this.email).then(() => {
           // this.router.navigate(['login']);
         })
           .catch((error) => {
             this.error = error;
             console.log(error);
           });
       })
         .catch((error) => {
           this.error = error;
           console.log(error);
         });
    }
}

我不知道为什么。当我按“确认注册”时,它会重新加载页面而不是执行该功能。好了,进入函数直到

console.log(formarCorreo);
html angular firebase angular2-routing
3个回答
2
投票

您可以将按钮类型从

button
更改为
submit
并将功能添加到按钮 click

<button [disabled]="!form.valid" class="btn btn-default btn-auth"
type="button" <-- type
(click)="registrar(form.value)" <--click
>Confirmar registro</button>

type="submit
将使元素重新加载表单


2
投票

默认情况下,html

<form>
元素导航至其
target
属性。

为了覆盖它(因为这是您在单页应用程序中大多数时间都需要的),Angular 提供了

(ngSubmit)
便利事件(它使用
event.preventDefault()
,无论如何都会解决您的情况,但很干净) )


0
投票

<button type="submit">
正在向服务器发出HTTP请求。就像
<input type="submit">
一样。

您可以将其更改为普通

<button>
或阻止使用事件提交表单。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.