Angular rxjs:延迟订阅,直到其他Observable发出

时间:2019-10-30 16:13:00

标签: javascript angular typescript rxjs

我有2个订阅-一个是我ActivatedRoute的订阅,另一个是ngrx Store的订阅。

  ngOnInit() {
    this.menuItems$ = this.store.select('menuItems');
    this.menuItems$.subscribe(data => {
      this.menuItems = data.menuItems;
    });
  }

  ngAfterViewInit() {
    this.fragmentSubscription = this.route.fragment.pipe(
      filter((fragment: string) => typeof fragment === 'string')
    ).subscribe((fragment: string) => {
      setTimeout(() => {
        const element: ElementRef = this.menuItems.find(menuItem => menuItem.link === fragment).element;
        if(element !== undefined) {
          element.nativeElement.scrollIntoView({ behavior: "smooth", block: "start", inline: "center" });
        }
      });
    });
  }

由于我的ActivatedRoute(片段)订阅取决于我的商店订阅数据,因此我想将我的ActivatedRoute(片段)订阅延迟到第一次订阅我的商店之前

为此有任何rxjs运算符吗?

Tnx

2 个答案:

答案 0 :(得分:2)

根据您的评论...

  

如果商店发出的第一次通知已经完成,那么我不再想在ActivatedRoute订阅时等待

您正在寻找combineLatest,它...

  

任何可观察对象发出一个值时,请从每个观察对象中发出最后一个发出的值。

所以我建议以下内容:

https://brandstory.in/
https://www.forbes.com/sites/karstenstrauss/2019/01/22/the-most-sustainable-companies-in-2019/#46dd14376d7d
https://about.google/
https://www.colgate.es/
https://marketingplatform.google.com/intl/es/about/enterprise/

答案 1 :(得分:0)

如果可能的话,不要从商店中获取数据。从解析器中获取它们。

您当然可以从解析器的存储中获取它们,然后在init函数中将它们作为值进行访问。

https://angular.io/api/router/Resolve

中查找更多信息