我将尝试使用异步管道来显示/隐藏一些等待消息。
app.component.html
<ng-template #isWait>
<h1>Please wait</h1>
</ng-template>
<div *ngIf="wait | async; else isWait">
<hello name="{{ name }}"></hello>
<p>
Start editing to see some magic happen :)
</p>
</div>
<button (click)="toggle()">Toggle</button>
<!-- Doesn't change -->
<div style="margin:1rem;">
Doesn't change here
<span style="color:red;">Value is {{wait | async}}</span>
(AppComponent)
</div>
app.component.ts
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
name: string = 'Angular 5';
wait: Observable<boolean>;
constructor(public waitService: WaitService) {
this.wait = this.waitService.wait;
}
toggle() {
this.waitService.toggle();
}
}
等待服务.ts
export class WaitService {
wait: Observable<boolean>;
private _wait: boolean = false;
private _onChange: EventEmitter<boolean> = new EventEmitter();
constructor() {
this.wait = Observable.create((obs: any) => {
obs.next(this._wait);
this._onChange.subscribe((w: boolean) => {
if (this._wait !== w) {
this._wait = w;
obs.next(this._wait);
}
});
});
}
toggle() {
this._onChange.emit(!this._wait);
}
}
我有带有等待属性的 WaitService 和用于切换等待的方法切换。当我尝试切换wait时,它在一种情况下有效,但对彼此不起作用(如我所料)。
所以,这让我很困惑。我会试着弄清楚为什么会发生。
示例:https ://stackblitz.com/edit/angular-fwghfj
如果您单击切换按钮,等待消息不会发生任何事情,但Wait2Component中的订阅将被发出,并且每次单击切换时都会写入控制台输出。
但是在订阅注释行后,显示和隐藏等待消息将正常工作,但在其他地方等待仍然没有变化。
当然,我可以将wait更改为布尔值,并且不关心使用async的这种情况,但这对我来说是出乎意料的行为。