首页 > 解决方案 > 如何有条件地禁用客户端

问题描述

我有一个服务器端渲染的应用程序(带有转换),我有一个 404 页面,我已经放入了一个惰性模块(所以我不会增加加载的 Javascript 大小)。

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

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

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

不幸的是,我没有找到任何正确实例化的方法TransferStatemain.ts因为它应该是通过导入的,而且我看不到在文件BrowserTransferStateModule中导入 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'

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

标签: angularexpressangular-universal

解决方案


我认为这就是你要找的:

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

推荐阅读