如果为ReplaySubject值,则为空

时间:2019-10-27 20:58:52

标签: angular rxjs observable

如果我的ReplaySubject内容初始化后在组件中为空,我想给它一个值,但是每次它使用/api/bulletin/getall值对其进行初始化,并且它覆盖之前在onViewChanged函数中分配的值时, ,如何检查我的ReplaySubject是否有值,然后分配值?

export abstract class BaseComponent implements  AfterContentInit {
    private currentResultsQueryPathSubject: ReplaySubject<string> = new ReplaySubject(1);
    protected get currentResultsQueryPath(): Observable<string> { return this.currentResultsQueryPathSubject.asObservable(); }

    public ngAfterContentInit(): void {
        this.currentResultsQueryPathSubject.next('/api/bulletin/getall');
    }

    public onViewChanged(event: any): void {
        this.currentResultsQueryPathSubject.next('/api/otheragencybulletin/getall');
    }
}

2 个答案:

答案 0 :(得分:0)

您所描述的内容似乎与BehaviourSubject的含义相似。它基本上为您提供了ReplaySubject(1)的所有功能,并且还记住了发出的最后一个值,可以使用getValue()方法进行访问。

唯一重要的区别是,除非您特别希望null为它的初始值,否则必须使用有意义的值来初始化它。

类似

private currentResultsQueryPathSubject: BehaviourSubject<string> = 
    new BehaviourSubject<string>(null);

可能就是您想要的。

答案 1 :(得分:0)

我能够通过将ReplaySubject声明为const来解决此问题:

const currentResultsQueryPathSubject: BehaviorSubject<string> = new BehaviorSubject('..route');