Аргумент типа AbstractControl не может быть назначен параметру типа string - PullRequest
0 голосов
/ 15 ноября 2018

Я создал форму, в которой реализовал проверку формы, которая просто отображает сообщение об ошибке, когда пользователь оставляет поле электронной почты или пароль пустым. Это работает отлично, но моя проблема в том, что я устанавливаю адрес электронной почты и пароль на «AbstractControl» вместо «String», поэтому, когда я пытаюсь аутентифицировать их с помощью firebase, я получаю это сообщение об ошибке, говорящее «аргумент типа AbstractControl не может быть назначен параметру типа строка ". Я считаю, что проблема в том, что я установил адрес электронной почты и пароль для абстрактного управления, а не для строки. Как я могу переопределить это и позволить пройти проверку и аутентификацию? Вот мой код.

HTML

<ion-content padding>
    <form [formGroup]="formgroup">
        <ion-list>
          <ion-item>
             <ion-label>Email</ion-label>
             <ion-input type="text" formControlName="email" name="email"></ion-input>
          </ion-item>
          <ion-item *ngIf="email.hasError('required') && email.touched">
            <p>*Email is required</p>
          </ion-item>

          <ion-item>
              <ion-label>Password</ion-label>
              <ion-input type="password" name="password" formControlName="password"></ion-input>
           </ion-item>
           <ion-item *ngIf="password.hasError('required') && password.touched">
             <p>*password is required</p>
           </ion-item>
        </ion-list>
      <button clear ion-button (click)="login()">Submit</button>
      </form>
</ion-content>

Файл TS

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { AngularFireAuth } from '@angular/fire/auth';
import { SignupPage } from '../signup/signup';
import { Validators, FormBuilder, FormGroup, AbstractControl } from '@angular/forms';
/**
 * Generated class for the ProfilePage page.
 *
 * See https://ionicframework.com/docs/components/#navigation for more info on
 * Ionic pages and navigation.
 */

@IonicPage()
@Component({
  selector: 'page-profile',
  templateUrl: 'profile.html',
})
export class ProfilePage {

  email: AbstractControl;
  password: AbstractControl; 
  formgroup: FormGroup;

  constructor(public formbuilder: FormBuilder, public aAuth : AngularFireAuth, public navCtrl: NavController, public navParams: NavParams) {

    this.formgroup = formbuilder.group({
      email:['',Validators.required],
      password:['',Validators.required]
    });

    this.email = this.formgroup.controls['email'];
    this.password = this.formgroup.controls['password'];
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad LoginPage');
  }

  login(){
   this.aAuth.auth.signInWithEmailAndPassword(this.email, this.password).then(
     e => {console.log(e)}
     )
  }

  goToSignup(){
    this.navCtrl.push(SignupPage)
  }

}

1 Ответ

0 голосов
/ 15 ноября 2018

Ну, в сообщениях об ошибках все сказано.Ошибка в том, что signInWithEmailAndPassword требует string с, но вы назвали его с AbstractControl с.

. Вы можете получить значение AbstractControl, используя для этого свойство value.

Измените метод login следующим образом:

login() {
  this.aAuth.auth.signInWithEmailAndPassword(this.email.value, this.password.value)
    .then(e => console.log(e))
}

Быстрый совет:

Не уверен, почему вы создали email и password свойств вашего компонента, когда вы могли бы легко получить значение формы, используя this.formgroup.value, а затем вы могли бы также использовать деструктуризацию, чтобы извлечь email и password из значения формы и затем передать его signInWithEmailAndPassword метод:

login() {
  const { email, passowrd } = this.formgroup.value;
  this.aAuth.auth.signInWithEmailAndPassword(email, password)
    .then(e => console.log(e))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...