我有一个服务器端渲染的应用程序(带转换(,还有一个404页面,我把它放在了一个懒惰模块中(这样我就不会增加加载的Javascript大小(。
这很好,但当客户端接管时会有一些闪烁,我认为这是由于JS块在主块完成加载后加载。
考虑到这个页面只包含静态链接和一个routerLink
,客户端根本不需要,我想知道是否有办法在某些URL上禁用客户端
编辑:正如评论中所建议的那样,我尝试有条件地引导应用程序。我不能使用URL作为条件,因为服务器在不存在的URL上响应404(此时没有重定向(。因此,最适合使用的是我在服务器端成功设置的TransferState
,它在关闭body
标签之前生成一些输出。
不幸的是,我没有找到任何方法在main.ts
中正确实例化TransferState
,因为它应该通过BrowserTransferStateModule
导入,而且我看不到在main.ts
文件中导入Angular模块的可能方法。
我试图用initTransferState
函数直接实例化它,但它似乎不是为在模块外使用而设计的,因为我得到了一个错误:
ERROR in ./src/main.ts
Module not found: Error: Can't resolve '@angular/platform-browser/src/browser/transfer_state' in 'G:DocumentsProjetsMyappSourcesmasterfrontendsrc'
除了做一些肮脏的反序列化之外,还有什么想法吗?
我想这就是您想要的:
import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
export class MyComponent implements OnInit{
constructor(@Inject(PLATFORM_ID) private platform: any) { }
ngOnInit() {
if (isPlatformBrowser(this.platform)) {
// use clientside stuff
}
}
}