Angular,订阅和变量更新
Angular, subscription and variable update
研究Angular我发现了这个问题:当我进行订阅并且从后端收到错误时,它正确地进入了 ERR 部分,并在控制台中打印“失败”,但它只在我第二次调用它时改变了一个布尔值。
这是我的代码:
模板:
{{isAlreadyRegistered}}
<alert *ngIf="isAlreadyRegistered">
User already registered.
</alert>
...
<div [formgroup]="registerForm">
...
<button (click)="register()">Save</button>
我是 TS:
registerForm: FormGroup;
isAlreadyRegistered: boolean = false;
...
register(): void{
this.service.SignUp({body: User}).subscribe(
(res) => {console.log('success')},
(ERR) => {
this.isAlreadyRegistered = true;
console.log('fail', ERR);
}
);
}
我在第一行插入了布尔变量以了解它是如何工作的。
因此,为了显示 <alert>
部分并让内插布尔值发生变化,我必须按两次“保存”按钮。
而且我确定它进入了 ERR 部分,因为它在控制台中打印了两次 'fail'。
我试着让它成为一个 Observable 而不是布尔值,但它仍然只在我第二次按下它时有效。
所以,我的问题是:为什么它在我第一次按下按钮时不更改布尔值,而是打印控制台日志?
以及为什么第二次它能正常工作?
谢谢!
试试这个:
将 ChangeDetectorRef 注入构造函数
import { ChangeDetectorRef } from '@angular/core';
constructor(
...
private cd: ChangeDetectorRef,
) { }
并将this.cd.markForCheck();添加到注册方法
register(): void{
this.service.SignUp({body: User}).subscribe(
(res) => {console.log('success')},
(ERR) => {
this.isAlreadyRegistered = true;
console.log('fail', ERR);
this.cd.markForCheck();
}
);
}
希望这能解决您的问题。
研究Angular我发现了这个问题:当我进行订阅并且从后端收到错误时,它正确地进入了 ERR 部分,并在控制台中打印“失败”,但它只在我第二次调用它时改变了一个布尔值。
这是我的代码:
模板:
{{isAlreadyRegistered}}
<alert *ngIf="isAlreadyRegistered">
User already registered.
</alert>
...
<div [formgroup]="registerForm">
...
<button (click)="register()">Save</button>
我是 TS:
registerForm: FormGroup;
isAlreadyRegistered: boolean = false;
...
register(): void{
this.service.SignUp({body: User}).subscribe(
(res) => {console.log('success')},
(ERR) => {
this.isAlreadyRegistered = true;
console.log('fail', ERR);
}
);
}
我在第一行插入了布尔变量以了解它是如何工作的。
因此,为了显示 <alert>
部分并让内插布尔值发生变化,我必须按两次“保存”按钮。
而且我确定它进入了 ERR 部分,因为它在控制台中打印了两次 'fail'。
我试着让它成为一个 Observable 而不是布尔值,但它仍然只在我第二次按下它时有效。
所以,我的问题是:为什么它在我第一次按下按钮时不更改布尔值,而是打印控制台日志? 以及为什么第二次它能正常工作?
谢谢!
试试这个:
将 ChangeDetectorRef 注入构造函数
import { ChangeDetectorRef } from '@angular/core';
constructor(
...
private cd: ChangeDetectorRef,
) { }
并将this.cd.markForCheck();添加到注册方法
register(): void{
this.service.SignUp({body: User}).subscribe(
(res) => {console.log('success')},
(ERR) => {
this.isAlreadyRegistered = true;
console.log('fail', ERR);
this.cd.markForCheck();
}
);
}
希望这能解决您的问题。