Angular(布尔值=isEdit)值在订阅回调中未更新

问题描述 投票:0回答:1

我在 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。

angular angular2-changedetection
1个回答
0
投票

这应该有效:

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

© www.soinside.com 2019 - 2024. All rights reserved.