如何有条件地禁用客户端

时间:2018-11-13 08:55:01

标签: angular express angular-universal

我有一个服务器端渲染的应用程序(带有过渡),并且我有一个404页面,该页面已放置在一个惰性模块中(因此我不会增加已加载的Javascript大小)。

这工作正常,但是在客户端接管时有些闪烁,我认为这是由于在主块完成加载后加载了JS块。

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

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

不幸的是,我没有找到任何方法来正确实例化TransferState中的main.ts,因为它应该通过BrowserTransferStateModule导入,并且我看不到在Angular模块中导入Angular模块的方法。 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'

除了进行一些肮脏的反序列化之外,还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我认为这就是您想要的:

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