fob*_*oss 5 rxjs server-side-rendering angular-universal angular nestjs
我在 SSR 上运行的异步管道有问题。没有错误,只有无限循环(似乎服务器正在等待 observable 被解析)。
我在用:
像这样的简单案例有效:
<p>{{ observable | async }}</p>
Run Code Online (Sandbox Code Playgroud)
但是使用结构指令不起作用:
如果
<p *ngIf="(observable$ | async) > 5">{{ observable$ | async }}</p>
Run Code Online (Sandbox Code Playgroud)
恩福
<p *ngFor="let item of items | async">{{ item }}</p>
Run Code Online (Sandbox Code Playgroud)
使用 async 是一个很好的做法,因为它会避免手动取消订阅以避免组件销毁时内存泄漏。但是,使用手动取消订阅有效。
更新 08/06/2020
当我在http://localhost:4200之后添加 index.html 时,应用程序会加载
异步在模板中是这样的:
<ng-container *ngIf="currentUser$ | async; else loadingUser">
Run Code Online (Sandbox Code Playgroud)
并且 currentUser$ 是在ngOnInit组件的方法中设置的:
ngOnInit(): void {
this.currentUser$ = this.authService.currentUser$;
}
Run Code Online (Sandbox Code Playgroud)
更新 16/06/2020
当我们在组件中删除所有 OnPush 检测策略的使用时,即使在结构指令中使用异步,SSR 模式也能工作。
所以这似乎表明在结构指令中使用带有异步的 OnPush TOGETHER 在 SSR 模式下不起作用。
笔记
我们nest.js用于 SSR/Universal。
当我们使用 OnPush 更改检测策略时,我们基本上会在我们特别需要时检测到更改。
仅当我们更改变量的引用而不仅仅是值时,才会检测到 OnPush 更改。
所以在这里你的两个概念发生了冲突。要么更改检测策略,要么更改currentUser$可观察值的引用。
我建议你应该改变这里的检测策略。
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |