0

有一系列组件在viewChildRef.show()对它们运行自定义方法后会显示出来(我使用的是@ViewChild参考)。

问题在于,@Select在子组件准备好之前,状态最初会使用装饰器(angular-redux/store)进行更新——订阅中的回调需要在ngAfterViewChecked触发后调用。

什么是延迟调用子组件直到特定钩子发生的最佳实践?对于那些不知道 angular-redux/store 的人,我有一个来自 @select 装饰器的 rxjs 订阅。也许延迟/去抖动设置会起作用?

我可以并且已经设置了一个readyForShow设置为 true 的变量,然后再次ngAfterViewChecked调用 false 一次。这是一个乏味的解决方案 - 必须有更好的方法,这在 angular-redux 世界中一定很常见。

我的目标是在我需要在其他地方也这样做时轻松快速地应用一些东西。

此外,如果在 ngrx 中有现成的解决方案,请随时提及这一点 - 这将使我考虑切换库并可能对其他人有所帮助!

4

1 回答 1

0

在我看来,几乎每个“真实”页面都会异步获取数据,所以我只需使用异步管道将模板连接到可观察对象,让文字部分显示并在异步数据到达时填充,例如

<span>Last modified: {{ (fileInfo$ | async)?.lastModified }}</span>

请注意构造 - 可观察对象和管道被括起来,在括号之外您有未包装的对象。Elvis/Safe 导航运算符?,当对象为空时停止属性评估。

如果页面在没有数据的情况下看起来不正确,您可以使用 ngIf 或 ngShow 将其隐藏

<span *ngIf="(lastRefresh$ | async)">Refreshed</span>

此外,对于 Redux 存储,默认/初始存储的形状可能很重要,例如,对于初始化为 {} 而不是 null 的对象,对于初始化为 [] 的数组 - 下游代码不会太容易崩溃。

于 2017-10-22T09:01:14.827 回答