兄弟组件通信Angular

时间:2017-12-20 09:37:53

标签: javascript angular typescript

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

一位兄弟正在获取数据,尤其是来自网址的ID

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

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

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

但有些事情不能正常,我的问题在哪里?

第一部分:这是负责从网址获取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中,我没有获得刷新的数据。 出了什么问题?

1 个答案:

答案 0 :(得分:1)

只需创建一个服务主题。

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

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

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

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

this.taskService.subscribe(id => {
  console.log(id);
});