angular - 如何有条件地禁用客户端
问题描述
我有一个服务器端渲染的应用程序(带有转换),我有一个 404 页面,我已经放入了一个惰性模块(所以我不会增加加载的 Javascript 大小)。
这工作正常,但是当客户端接管时会有一些闪烁,我认为这是由于主块完成加载后加载 JS 块。
鉴于此页面仅包含静态链接和一个routerLink
,根本不需要客户端,我想知道是否有办法在某些 URL 上禁用客户端
编辑:正如评论中所建议的,我尝试有条件地引导应用程序。我不能使用 URL 作为条件,因为服务器在不存在的 URL 上响应 404(此时没有重定向)。所以最适合使用的是TransferState
我在服务器端成功设置的东西,它会在结束body
标记之前生成一些输出。
不幸的是,我没有找到任何正确实例化的方法TransferState
,main.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'
除了做一些肮脏的反序列化之外还有什么想法吗?
解决方案
我认为这就是你要找的:
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
}
}
}
推荐阅读
- javascript - 单击angularjs时如何限制选项卡中的数据加载?
- ios - 在 Doubles 数组中建立范围
- nasm - NASM x64 Linux movsb 段错误
- c++ - 如何在 C++ 中打印这个完全对齐的?
- javascript - 是否可以在 nativescript 项目中同时使用 typescript 和 javscript
- c++ - C++20 概念/需要表达式来测试泛型 lambda 是否接受类型
- javascript - 在 Set 集合状态上干净地执行 map() 但仍然在状态更改时重新渲染?
- html - 数据列表显示远离输入
- php - 在请求 MySQL PHP 中调用所有函数
- c# - 删除用户对象的状态代码属性