angular 4 通用 - 服务器和浏览器的不同组件/模块
angular 4 universal - different component / module for server and browser
所以我有一个 jquery 插件的简单包装器,但是显然由于缺少浏览器全局对象,包装器在 universal 上出现了错误。
与大多数 jquery 插件一样,此插件还
我想知道是否有一种简单的方法可以让我们拥有两个不同版本的 component/module,一个用于通用,一个用于非通用。
Universal 确实有一个单独的起始 'app' 模块(用于加载 BrowserAnimationsModules 与 NoopAnimationsModule),但这只是因为这些模块导出服务。
我可以为您提供一些建议,您可以尝试一下。我也是 angular-universal
的新手。这是 universal
用户中的常见问题。
"... because of a lack of browser global objects"
是的!通常,您会在 universal
上看到错误,例如“document
未找到”、“navigator
未找到”、“window
未找到”等
解决这个问题?
您可以尝试使用 jsdom,它将通过模拟足够多的网络浏览器子集来消除此类警告。
还有什么吗?
您可以 运行 那些出错的代码,仅在客户端,从而消除控制台上的任何错误。为此,您可以使用 universal
团队提供的 here 解决方案。
这是他们的说法:
If you need to use them, consider limiting them to only your client
and wrapping them situationally. You can use the Object injected using
the PLATFORM_ID token to check whether the current platform is browser
or server.
import { PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser, isPlatformServer } from '@angular/common';
constructor(@Inject(PLATFORM_ID) private platformId: Object) { ... }
ngOnInit() {
if (isPlatformBrowser(this.platformId)) {
// Client only code.
...
}
if (isPlatformServer(this.platformId)) {
// Server only code.
...
}
}
现在,假设你有一个问题,你需要为 - 比方说 - 一个滑块插入第 3 方库,你不想在服务器端加载它,增加初始加载的膨胀.
在这种情况下,您可以在服务器端渲染后动态注入所有内容。这是一个很好的 ,您可以将其与上面的代码片段结合起来以满足此要求。
我希望,我已经让您大致了解了如何处理您的情况。如果您有任何疑问,请告诉我。
所以我有一个 jquery 插件的简单包装器,但是显然由于缺少浏览器全局对象,包装器在 universal 上出现了错误。
与大多数 jquery 插件一样,此插件还
我想知道是否有一种简单的方法可以让我们拥有两个不同版本的 component/module,一个用于通用,一个用于非通用。
Universal 确实有一个单独的起始 'app' 模块(用于加载 BrowserAnimationsModules 与 NoopAnimationsModule),但这只是因为这些模块导出服务。
我可以为您提供一些建议,您可以尝试一下。我也是 angular-universal
的新手。这是 universal
用户中的常见问题。
"... because of a lack of browser global objects"
是的!通常,您会在 universal
上看到错误,例如“document
未找到”、“navigator
未找到”、“window
未找到”等
解决这个问题?
您可以尝试使用 jsdom,它将通过模拟足够多的网络浏览器子集来消除此类警告。
还有什么吗?
您可以 运行 那些出错的代码,仅在客户端,从而消除控制台上的任何错误。为此,您可以使用 universal
团队提供的 here 解决方案。
这是他们的说法:
If you need to use them, consider limiting them to only your client and wrapping them situationally. You can use the Object injected using the PLATFORM_ID token to check whether the current platform is browser or server.
import { PLATFORM_ID } from '@angular/core'; import { isPlatformBrowser, isPlatformServer } from '@angular/common'; constructor(@Inject(PLATFORM_ID) private platformId: Object) { ... } ngOnInit() { if (isPlatformBrowser(this.platformId)) { // Client only code. ... } if (isPlatformServer(this.platformId)) { // Server only code. ... } }
现在,假设你有一个问题,你需要为 - 比方说 - 一个滑块插入第 3 方库,你不想在服务器端加载它,增加初始加载的膨胀.
在这种情况下,您可以在服务器端渲染后动态注入所有内容。这是一个很好的
我希望,我已经让您大致了解了如何处理您的情况。如果您有任何疑问,请告诉我。