所以我有一个简单的jquery插件包装器,但很明显,由于缺少浏览器全局对象,包装器会在通用上出错。
与大多数jquery插件一样,这个插件也是
我想知道我们是否有一种简单的方法可以拥有两个不同版本的组件/模块,一个用于通用,一个用于非通用。
Universal确实有一个单独的启动'app'模块(用于加载BrowserAnimationsModules和NoopAnimationsModule),但这只能起作用,因为这些模块导出服务。
答案 0 :(得分:2)
我可以为您提供一些可以尝试的建议。我对angular-universal
也很陌生。这是universal
用户中的常见问题。
“......因为缺少浏览器全局对象”
是的!通常情况下,您会看到universal
上的错误,例如“找不到document
”,“找不到navigator
”,“找不到window
”等等。
您可以尝试使用jsdom,这将通过模拟足够的Web浏览器子集来消除此类警告。
您可以运行那些错误的代码,仅在客户端运行,从而消除控制台上的任何错误。为此,您可以使用universal
小组提供的解决方案here。
以下是他们所说的:
如果您需要使用它们,请考虑将它们仅限于您的客户 并在情境中包装它们。您可以使用注入的Object PLATFORM_ID令牌,用于检查当前平台是否为浏览器 或服务器。
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. ... } }
现在,假设您有一个问题,您需要插入第三方库 - 比方说 - 一个滑块,您不希望在服务器端加载它,为初始加载添加更多膨胀。
在这种情况下,您可以在服务器端渲染后动态注入所有内容。这是一个很好的answer,您可以将其与上述代码段结合使用以满足此要求。
我希望,我已经大致了解了如何处理你的情况。如果您有任何疑问,请与我们联系。