路由到一个组件并订阅相同的组件

我有一个相册组件,其中显示了一系列图像。当用户单击图像时,将调用一个方法,该方法发出BehaviorSubject(使用next)并路由到另一个组件:

相册组件html:

<ul class="container">
    <li *ngFor="let album of albums">
        <img class="album-cover" [src]="album.albumCoverPhotoUrl" alt="album.name" (click)="onAlbumSelect(album)">
        <p class="album-name">{{ album.name }}</p>
    </li>
</ul>

相册component.ts:

onAlbumSelect(album: Album) {
    this.router.navigate(['gallery-list']);
    this.albumsService.fromAlbum.next(album);
    setTimeout(() => {
      this.albumsService.fromAlbum.next(null);
    }, 100);

  }

在我的画廊列表组件(我在上面导航到的组件)中,我订阅了BehaviorSubject并使用从发射的数据中获得的相册名称过滤图像数组:

ngOnInit() {  

   this.albumSub = this.albumsService.fromAlbum.subscribe(album => {

      this.selectedAlbum = album;

      if(this.selectedAlbum) {
        this.galleryList = this.images.filter(e => e.album === this.selectedAlbum.name);
      }  
}

我正在使用行为主题,以前使用的是主题,但此方法不起作用,因为我认为在图库列表组件上初始化订阅之前,主题是在发出的(因此缺少从主题发出的数据) 。

从Album组件中的onAlbumSelect方法可以看到,我正在使用setTimeout方法发出一个空值来重置behviorSubject值,这样它就不会影响我的代码的其他部分(gallery-list组件也是用来显示完整的图像列表,而不仅仅是显示一张专辑中的图像,我把这部分代码留给了我,因为我认为没有必要包含它。

这感觉有些“ hacky”,我只是想知道是否有人能想到一种更好的方法来解决此问题?

我假设发出主题,路由到组件并从您要路由到的组件内部订阅主题是Angular应用程序中经常执行的操作,因此有一种方法可以仅使用主题(而不是behaviorSubject),但确保在发出值之前已设置订阅?抱歉,很长的帖子!