2017-12-18 250 views
0

在我们的Angular 4.x项目中,我们使用了Angular Universal和angular2-cookie-law。我意识到Angular Universal不适用于windowdocument等,但我已阅读了一些变通方法。我试过如下:如何在Angular Universal中设置cookie?

if (isPlatformBrowser(this.platformId)) { 
    this.showCookieLaw = true; 
} 

而缠上了我的cookie的法律成分在这样的观点:

<cookie-law *ngIf="showCookieLaw">...</cookie-law> 

但是,这并不工作,到目前为止,还没有发现一种不同的方法。任何人都可以引导我正确的方向?

+0

什么是“没有工作”是什么意思? – estus

+0

当我运行我的项目,如在 - 启动NodeJS服务器,我得到错误'文件未定义'。也就是说,预渲染器不理解使用Angular Universal时出现问题的“document”元素。 – Lars

+0

这个问题应该明确说明这一点。 – estus

回答

0

如果一个模块使用单独的提供程序作为document.cookie的抽象,则可以为服务器单独定义它。但是,它直接使用document全局,因此负责该操作的提供程序应该在服务器模块中进行模拟。

考虑到the component uses service's seen public method,这是一个应该被掐灭,是这样的:

import { CookieLawService } from 'angular2-cookie-law'; 

exports class MockedCookieLawService { 
    seen =() => false; 
} 

... 
imports: [CookieLawModule, ...], 
providers: [{ provide: CookieLawService, useClass: MockedCookieLawService }, ...] 
... 
+0

我无法解决您的问题,因此我继续寻找不同的方法。经过一段时间[以下答案](https://stackoverflow.com/a/44402938/1164012)来帮助我。 – Lars

+0

你的项目结构看起来并不明显。 '应该在服务器模块中被嘲弄',指的是在那个答案中解释的东西。 – estus