2017-12-18 21 views
0

Angular 4.xプロジェクトでは、Angular Universalをangular2-cookie-lawと組み合わせて使用​​しています。私はAngular Universalがwindow,documentなどで動作しないという事実を認識していますが、いくつかの回避策についてお読みになりました。角度ユニバーサルでクッキーを設定するには?

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

そして、このような観点で、私のクッキー義理のコンポーネントをラップ:私は次のことを試してみました

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

はしかし、これは動作しませんでしたし、これまでにさまざまなアプローチを発見していません。誰でも私に正しい方向を導くことができますか?

+0

は何が動作しませんでした "んが意味ですか? – estus

+0

NodeJSサーバを起動してプロジェクトを実行すると、 'document is not defined 'というエラーが出ます。つまり、プリレンダラーは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

関連する問題