gpt4 book ai didi

angular - 在使用 URL 参数加载页面之前等待 ngrx 操作

转载 作者:太空狗 更新时间:2023-10-29 17:18:21 24 4
gpt4 key购买 nike

我正在使用 ngrx 构建一个 ng2 应用程序。当应用程序启动时,将调用网络服务以获取初始数据,获取此数据后,我将创建一个INIT_DONE 操作。

我的状态是这样的:

export interface State {
documents: Document[];
selectedDocument: Document
}

当我转到页面/mypage/456 时,其中 456 是一个 url 参数,我需要获取一些已提取的数据,因此我得到了这样的 URL 参数:

ngOnInit() {
this.paramSubscription = this.route.params
.select<string>('id')
.map((id) => new SelectAction(id))
.subscribe(this.store);
}

SELECT_ACTION 在获取的数据中查找元素并设置 selectedDocument。问题是 SELECT_ACTIONINIT_DONE 之前创建,此时 documents 是空的。

如何在加载页面之前等待 INIT_DONE

最佳答案

我会使用 combineLatest运算符,因为它结合了多个源流的最新值。此外,我会使用过滤器仔细检查文档是否已设置(这里我假设它是一个数组)。

ngOnInit() {
this.subscription = Observable.combineLatest(
this.store.select("documents")
.filter(documents => documents.length > 0),
this.paramSubscription = this.route.params
.select<string>('id')
)
.map((combinedData: [Object[], string]) => combinedData[1])
.subscribe(this.store);
}

还将订阅分配给一个变量,以便您可以在组件销毁时取消订阅。否则,您的订阅将在组件被销毁后存在,并且您的操作可能仍会发出:

ngOnDestroy() {
this.subscription.unsubscribe();
}

关于angular - 在使用 URL 参数加载页面之前等待 ngrx 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40872357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com