2017-12-18 3 views
0

In unserem Angular 4.x Projekt verwenden wir Angular Universal in Kombination mit angular2-cookie-law. Ich bin mir der Tatsache bewusst, dass Angular Universal nicht mit window, document usw. funktioniert, aber ich habe über einige Work-Arounds gelesen. Ich habe versucht, die folgenden:Wie setze ich einen Cookie in Angular Universal?

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

und wickeln meine Cookie-Gesetz-Komponente in der Ansicht wie folgt aus:

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

Dies ist jedoch nicht funktioniert hat und bisher nicht einen anderen Ansatz gefunden. Jeder kann mir die richtige Richtung zeigen?

+0

Was bedeutet ‚nicht funktioniert‘ bedeuten? – estus

+0

Wenn ich mein Projekt starte, wie in - starte den NodeJS Server, bekomme ich den Fehler 'Dokument ist nicht definiert'. Das bedeutet, dass der Vorrenderer das Element "document", das bei der Verwendung von Angular Universal ein Problem darstellt, nicht versteht. – Lars

+0

Die Frage sollte dies explizit angeben. – estus

Antwort

0

Wenn ein Modul einen separaten Provider als Abstraktion über document.cookie verwendet, könnte er separat für den Server definiert werden. Es verwendet jedoch document global direkt, so dass der Provider, der dafür zuständig ist, im Servermodul verspottet werden sollte.

Bedenkt man, dass the component uses service's seen public method, das ist die eine, die Stub werden sollte, so etwas wie:

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

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

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

Ich konnte Ihre Lösung nicht erarbeiten, deshalb suchte ich weiter nach einem anderen Ansatz. Nach einiger Zeit kam die [folgende Antwort] (https://stackoverflow.com/a/44402938/1164012) vorbei und half mir aus. – Lars

+0

Es war nicht offensichtlich, wie Ihre Projektstruktur aussieht. "sollte in Server-Modul verspottet werden" bezog sich auf das, was in dieser Antwort erklärt wird. – estus

Verwandte Themen