angular - 函数返回后变量未定义,需要点击两次才能设置变量
问题描述
我有一个 HTML 文件:
一个用于密码重置...标准表单,如果函数返回错误,则输入电子邮件、提交和错误 div):
<form #f="ngForm" (ngSubmit)="reset(f.value)">
<div class="form-error">
{{msg}}
</div>
<input matInput placeholder="Email" ngModel name="email" id="email" type="email" required>
<button mat-raised-button color="primary" [disabled]="!f.valid">Login</button>
</form>
我删除了一些内容以使其更具可读性,但它确实有效。这是我忘记的电子邮件 .ts 文件:
userService: UserService //Helper to forgot email function call
msg: string; //If error messages occur, div will be populated
//Sends the email from the form to the UserService method
reset(email) {
this.msg = this.userService.reset(email.email);
console.log(this.msg);
}
这是我的用户服务功能:
reset(email):string {
this.afAuth.auth.sendPasswordResetEmail(email)
.catch(err => {
this.errorMessage = err.message;
return this.errorMessage;
})
}
我的问题是,当我输入无效的电子邮件时,html 中的 DIV 会在两次单击后填充。第一次单击后,味精返回未定义,是什么让我的 div 在第一次单击时无法填充错误消息?
解决方案
在这个块中:
reset(email):string {
this.afAuth.auth.sendPasswordResetEmail(email)
.catch(err => {
this.errorMessage = err.message;
return this.errorMessage;
})
}
该return
声明实际上无济于事。它没有脱离reset
方法,基本上没有使用。
您可以将它从 中返回reset
,但这将采用承诺的形式,这意味着您then
在调用它时需要一个块:
this.userService.reset(email.email).then(err => {
console.error(err);
});
我个人建议只是让拒绝冒出来reset
,导致:
reset(email):string {
return this.afAuth.auth.sendPasswordResetEmail(email)
}
接着
this.userService.reset(email.email)
.catch(err => {
this.errorMessage = err.message;
})
推荐阅读
- sql - 当另一个表被更新时触发更新同一个表中的值
- python - 使用 Elastisearch 中的脚本进行更新
- angular - Angular Material 7 Datepicker:禁用多年视图
- excel - 用于重复条件合并和求和的 Excel VBA
- react-native - React Native / 使用字符串作为 FlatList 中的数据?
- javascript - How to wait untill for (append) finished and then show result javascirpt / jquery
- java - 如何将 JTextField 中的输入转换为日期?
- python - 如何在 django 中显示来自 2 个模型的数据,并在模板中使用一对多的关系
- view - Layout inflater with DialogFragment
- c++ - Counting and retrieving repetition using algorithm and lambda