首页 > 解决方案 > ReplaySubject 上的方法 next() 在订阅中不起作用

问题描述

我有一个代码:

enum URLs {
  'STORY_BUILDER' = 'story-builder',
  'IB_VIEW' = 'ib-view',
}

defaultGroupStoryRequest$ = new ReplaySubject<boolean>();
defaultGroupIbViewRequest$ = new ReplaySubject<boolean>();



const invalidRequest = R.pathOr(
  false,
  ['extras', 'state', 'invalidRequest'],
  navigation,
);

if (invalidRequest) {
  this.router.events
    .pipe(
      filter((e) => e instanceof NavigationEnd),
      pairwise(),
    )
    .subscribe((e) => {
      const parts = (e[0] as NavigationEnd).url.split('/');
      const previousPage = parts[parts.length - 1];
      this.defaultGroupIbViewRequest$.next(previousPage === URLs.IB_VIEW);
      this.defaultGroupStoryRequest$.next(previousPage === URLs.STORY_BUILDER);
    });
}

在模板中:

<shared-overlay [isVisible]="defaultGroupStoryRequest$ | async">
<ng-template>
<shared-confirm
  type="warning"
  question="Generating Story for the default group is not allowed."
  label="Please select different group."
  acceptText="Ok"
  acceptButtonStyle="btn-danger-outline"
  [showDeclineButton]="false"
  (accept)="defaultGroupStoryRequest$.next(false)"
>
</shared-confirm>

订阅正在执行,但我无法使用next()显示弹出窗口的方法发送值。为什么我的next()方法不执行?我想获取上一页,并与枚举中的值进行比较,然后在屏幕上显示弹出窗口。

标签: angularrxjsangular-routingsubscribereplaysubject

解决方案


推荐阅读