gpt4 book ai didi

angular - AbstractControl 类型的参数不能分配给字符串类型的参数

转载 作者:行者123 更新时间:2023-12-03 22:12:33 26 4
gpt4 key购买 nike

我已经构建了一个表单,我在其中实现了表单验证,当用户将电子邮件或密码字段留空时,该表单仅显示一条错误消息。它工作正常,但我的问题是我将电子邮件和密码设置为“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)
}

}

最佳答案

好吧,错误消息说明了一切。错误是因为 signInWithEmailAndPassword需要 string s 但你已经用 AbstractControl 调用了它s。

您可以获得 AbstractControl 的值使用 value其上的属性(property)。

更改您的 login方法:

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

快速提示:

不知道你为什么创建 emailpassword组件上的属性,当您可以使用 this.formgroup.value 轻松获取表单的值时然后你也可以使用解构来提取 emailpassword从表单值然后将其传递给 signInWithEmailAndPassword方法:
login() {
const { email, passowrd } = this.formgroup.value;
this.aAuth.auth.signInWithEmailAndPassword(email, password)
.then(e => console.log(e))
}

关于angular - AbstractControl 类型的参数不能分配给字符串类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com