兄弟组件通信Angular

问题描述 投票:-2回答:1

我正处于角度4,与兄弟姐妹一起工作,没有父母或孩子,只是兄弟姐妹。

一个兄弟正在获取数据,尤其是URL中的id

  public getId () {
    const id = +this.route.snapshot.paramMap.get('id');
    // console.log (id); //working! 
    return id
    }

另一个人试图做同样的事情来拯救我们所有这一切......但即使他在同一条路线上,他也没有得到身份证。我不知道为什么。

所以,现在我想将兄弟姐妹的ID发送给兄弟姐妹。经过一些研究,我找到了很多关于孩子和父母的例子,但在我的情况下他们是兄弟姐妹,所以看起来通过服务传递数据是最好的选择,我跟着这个tutorial

但是有些东西不能正常工作,我的问题在哪里?

第一部分:这是负责从URL获取ID的人

  urlId: number;
  public getId () {
    const id = +this.route.snapshot.paramMap.get('id');
    // console.log (id); //working! 
    return id
    }
ngOnInit(): void {
    const id = +this.getId ();                   
    this.taskService.newId(id)
}

服务:这个用函数newID()更新noId

  private noId = new BehaviorSubject<number>(0);
  defaultId = this.noId.asObservable();

  newId(urlId: number) {
    this.noId.next(urlId);
    console.log (urlId); // this still working
  }

第二部分:在运行onInit()函数之后,这个应该得到数据,但什么也没发生。

urlId: number;
  ngOnInit() {
    this.taskService.defaultId.subscribe(urlId => this.urlId = urlId)
     console.log (this.urlId); //return 0, or the same value as private noId 
    }

因此,在组件2中,我没有获得刷新的数据。怎么了?

javascript angular typescript
1个回答
1
投票

只需创建一个服务主题。

public idSub$ = new Subject<number>();

在您获取ID的兄弟组件中,只需粘贴此代码即可。

this.taskService.idSub$.next(id);

在您想要id的兄弟组件中使用以下代码:

this.taskService.subscribe(id => {
  console.log(id);
});
© www.soinside.com 2019 - 2024. All rights reserved.