我在 Angular 应用程序中的事件发射器的订阅回调中更新组件属性 (isEdit) 时遇到问题。
背景:
我有一个 CreateComponent 负责添加或编辑手机。 isEdit 属性(布尔值)用于控制组件的状态(创建与编辑)。 当需要编辑移动设备时,MobileService 会发出包含 ID 的事件 (emitId)。
代码片段:
打字稿
export class CreateComponent implements OnInit {
isEdit = false;
mobileId: any;
constructor(private service: MobileService) { }
ngOnInit(): void {
this.service.emitId.subscribe((id: any) => {
console.log('Received ID:', id);
this.isEdit = true; // Trying to set isEdit to true
console.log('isEdit value (after setting):', this.isEdit); // Optional for debugging
});
console.log('Initial isEdit value:', this.isEdit); // Before subscription
}
// ... other component logic
}
预期行为:
通过emitId事件接收到ID后,isEdit应设置为true以指示编辑模式。 模板应反映 isEdit 中的更改(可能会显示创建模式与编辑模式的不同内容)。
当前行为:
订阅回调中的console.log语句显示收到ID后isEdit被设置为true。 但是,模板继续显示内容,就好像 isEdit 仍然为 false。
这应该有效:
isEdit = new BehaviourSubject(false);
...
ngOnInit(): void {
this.service.emitId.subscribe((id: any) => {
console.log('Received ID:', id);
this.isEdit.next(true); // Trying to set isEdit to true
console.log('isEdit value (after setting):', this.isEdit); // Optional for debugging
});
console.log('Initial isEdit value:', this.isEdit.value); // Before subscription
}
然后在模板中使用“isEdit | async”和异步管道来订阅行为子kect