【发布时间】:2019-08-03 05:43:57
【问题描述】:
我在Angular 7 中构建了几个站点,其中SSR 用于SEO 的改进。所有应用程序本身都很好,但是总是会发生 第一次 或当您执行 硬刷新 时会出现这个小 blip内容显示出来后,网站本身突然“重新加载”。
ngIf 的所有可能隐藏在组件的 ngOnInit 部分中评估的组件的条件似乎都被忽略了,并且可能以 opacity = 0 开头以隐藏 HTML 元素的动画也被显示。
也就是说,我在不同的论坛、帖子、github 问题等中阅读了很多关于此的内容,但是我无法找到任何解决方案。
我尝试将main.ts 更改为:
document.addEventListener('DOMContentLoaded', () => {
platformBrowserDynamic().bootstrapModule(AppModule);
});
而不是经典的引导机制,没有乐趣。我已经尝试在AppRouting 中启用initialNavigation 的选项,但仍然不起作用:
@NgModule({
exports: [ RouterModule ],
imports: [ RouterModule.forRoot(routes, {enableTracing, scrollPositionRestoration: 'enabled', initialNavigation: 'enabled'}) ],
})
export class AppRoutingModule {}
我在这里阅读了我认为可能相关的问题: https://github.com/angular/angular-cli/issues/7477 但它最终引用了对我不起作用的 initialNavigation 标志。
我不确定我是否可以在这里尝试其他任何东西或设置任何“特殊”的东西,但是没有延迟或隐藏导致导航的实际呈现页面真的很好有点不友好。
请注意,这仅适用于首次加载、首次加载或硬刷新。导航的其余部分都很好。
【问题讨论】:
-
你使用 TransferState 了吗?
-
我在app.module中配置了TransferHttpCacheModule,在app.server.module中配置了ServerTransferStateModule。是这个意思吗?
-
是的,该模块正在使用 TransferState。使用它解决了我的闪烁问题,所以我认为它对你来说可能是一样的
-
我也是这么想的……还是谢谢你。它确实解决了重复的 http 调用
-
嗨@EliyaCohen,我尝试了不同的方法,例如 initialNavigationEnabled: true 并确保正确设置了 ServerTransferState 和 BrowserTransferState 模块。除此之外,我不时看到这种情况发生,我一直在更新到最新版本的 angular/universal 但没有运气。我想您可以默认执行类似“显示:无”的操作,然后在一段时间后将其删除(虽然还没有尝试过),但我不确定它对 SEO 的影响。老实说,在大多数情况下,我最终都接受了它——而且感觉从未像现在这样好过!
标签: angular angular-universal server-side-rendering