Angular 如何有条件地禁用客户端

Angular 如何有条件地禁用客户端,angular,express,angular-universal,Angular,Express,Angular Universal,我有一个服务器端呈现的应用程序(带转换),我有一个404页面,我把它放在一个惰性模块中(所以我不会增加加载的Javascript大小) 这很好,但是当客户端接管时会出现一些闪烁,我认为这是由于在主块完成加载之后加载了JS块 鉴于此页面仅包含静态链接和一个routerLink,因此根本不需要客户端,我想知道是否有办法在某些URL上禁用客户端 编辑:正如我在评论中建议的那样,我试图有条件地引导应用程序。我不能使用URL作为条件,因为服务器对不存在的URL响应404(此时没有重定向)。因此,最适合使用

我有一个服务器端呈现的应用程序(带转换),我有一个404页面,我把它放在一个惰性模块中(所以我不会增加加载的Javascript大小)

这很好,但是当客户端接管时会出现一些闪烁,我认为这是由于在主块完成加载之后加载了JS块

鉴于此页面仅包含静态链接和一个
routerLink
,因此根本不需要客户端,我想知道是否有办法在某些URL上禁用客户端

编辑:正如我在评论中建议的那样,我试图有条件地引导应用程序。我不能使用URL作为条件,因为服务器对不存在的URL响应404(此时没有重定向)。因此,最适合使用的是
TransferState
,我在服务器端成功设置了它,它在关闭
body
标记之前生成了一些输出

不幸的是,我没有找到任何方法在
main.ts
中正确实例化
TransferState
,因为它应该通过
BrowserTransferStateModule
导入,而且我认为没有可能的方法在
main.ts
文件中导入角度模块

我试图用
initTransferState
函数直接实例化它,但它似乎不是为在模块外部使用而设计的,因为我遇到了一个错误:

ERROR in ./src/main.ts
Module not found: Error: Can't resolve '@angular/platform-browser/src/browser/transfer_state' in 'G:\Documents\Projets\Myapp\Sources\master\frontend\src'

除了做一些肮脏的反序列化,还有什么其他想法吗?

我想这就是你想要的:

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
        }
    }
}

也许你可以尝试不根据url在
main.ts
文件中引导应用程序?你的评论让我查看了这个文件,我刚刚发现了它的用途。如果没有其他内置解决方案,我会尝试使用它。我在问题中添加了一些细节。我想完全禁用客户端,而不仅仅是一个组件