Ich habe mich überall nach Angular-Cookies umgesehen, aber ich konnte nicht herausfinden, wie die Cookie-Verwaltung in Angular implementiert werden kann. Gibt es eine Möglichkeit, Cookies zu verwalten (wie $ cookie in AngularJS)?
javascript
angular
typescript
Miquel
quelle
quelle
Antworten:
Ich habe meine eigenen Funktionen erstellt:
@Component({ selector: 'cookie-consent', template: cookieconsent_html, styles: [cookieconsent_css] }) export class CookieConsent { private isConsented: boolean = false; constructor() { this.isConsented = this.getCookie(COOKIE_CONSENT) === '1'; } private getCookie(name: string) { let ca: Array<string> = document.cookie.split(';'); let caLen: number = ca.length; let cookieName = `${name}=`; let c: string; for (let i: number = 0; i < caLen; i += 1) { c = ca[i].replace(/^\s+/g, ''); if (c.indexOf(cookieName) == 0) { return c.substring(cookieName.length, c.length); } } return ''; } private deleteCookie(name) { this.setCookie(name, '', -1); } private setCookie(name: string, value: string, expireDays: number, path: string = '') { let d:Date = new Date(); d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); let expires:string = `expires=${d.toUTCString()}`; let cpath:string = path ? `; path=${path}` : ''; document.cookie = `${name}=${value}; ${expires}${cpath}`; } private consent(isConsent: boolean, e: any) { if (!isConsent) { return this.isConsented; } else if (isConsent) { this.setCookie(COOKIE_CONSENT, '1', COOKIE_CONSENT_EXPIRE_DAYS); this.isConsented = true; e.preventDefault(); } } }
quelle
Update: angle2-cookie ist jetzt veraltet. Bitte verwenden Sie stattdessen mein ngx-Cookie .
Alte Antwort:
Hier ist angular2-cookie , die genaue Implementierung des von mir erstellten Angular 1-
$cookies
Dienstes (plus einerremoveAll()
Methode). Es werden dieselben Methoden verwendet, die nur in Typoskript mit Angular 2-Logik implementiert sind.Sie können es als Service in das Komponentenarray
providers
einfügen:import {CookieService} from 'angular2-cookie/core'; @Component({ selector: 'my-very-cool-app', template: '<h1>My Angular2 App with Cookies</h1>', providers: [CookieService] })
Definieren Sie es danach wie gewohnt in der Struktur und beginnen Sie mit der Verwendung von:
export class AppComponent { constructor(private _cookieService:CookieService){} getCookie(key: string){ return this._cookieService.get(key); } }
Sie können es über npm erhalten:
quelle
Ja, hier ist ein ng2-Cookie
Verwendung:
import { Cookie } from 'ng2-cookies/ng2-cookies'; Cookie.setCookie('cookieName', 'cookieValue'); Cookie.setCookie('cookieName', 'cookieValue', 10 /*days from now*/); Cookie.setCookie('cookieName', 'cookieValue', 10, '/myapp/', 'mydomain.com'); let myCookie = Cookie.getCookie('cookieName'); Cookie.deleteCookie('cookieName');
quelle
Verwenden Sie den NGX-Cookie-Service
Inastall dieses Paket:
npm install ngx-cookie-service --save
Fügen Sie den Cookie-Service als Anbieter zu Ihrer app.module.ts hinzu:
import { CookieService } from 'ngx-cookie-service'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, ... ], providers: [ CookieService ], bootstrap: [ AppComponent ] })
Rufen Sie dann Ihre Komponente auf:
import { CookieService } from 'ngx-cookie-service'; constructor( private cookieService: CookieService ) { } ngOnInit(): void { this.cookieService.set( 'name', 'Test Cookie' ); // To Set Cookie this.cookieValue = this.cookieService.get('name'); // To Get Cookie }
Das ist es!
quelle
10.1.1
Fehler verursachtUncaught TypeError: Object(...) is not a function
. Ich benutze die Version2.1.0
, um den Code zum Laufen zu bringen. Überprüfen Sie github.com/stevermeister/ngx-cookie-service/issues/103Ich mache Miquels Version als Service injizierbar:
import { Injectable } from '@angular/core'; @Injectable() export class CookiesService { isConsented = false; constructor() {} /** * delete cookie * @param name */ public deleteCookie(name) { this.setCookie(name, '', -1); } /** * get cookie * @param {string} name * @returns {string} */ public getCookie(name: string) { const ca: Array<string> = decodeURIComponent(document.cookie).split(';'); const caLen: number = ca.length; const cookieName = `${name}=`; let c: string; for (let i = 0; i < caLen; i += 1) { c = ca[i].replace(/^\s+/g, ''); if (c.indexOf(cookieName) === 0) { return c.substring(cookieName.length, c.length); } } return ''; } /** * set cookie * @param {string} name * @param {string} value * @param {number} expireDays * @param {string} path */ public setCookie(name: string, value: string, expireDays: number, path: string = '') { const d: Date = new Date(); d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); const expires = `expires=${d.toUTCString()}`; const cpath = path ? `; path=${path}` : ''; document.cookie = `${name}=${value}; ${expires}${cpath}; SameSite=Lax`; } /** * consent * @param {boolean} isConsent * @param e * @param {string} COOKIE * @param {string} EXPIRE_DAYS * @returns {boolean} */ public consent(isConsent: boolean, e: any, COOKIE: string, EXPIRE_DAYS: number) { if (!isConsent) { return this.isConsented; } else if (isConsent) { this.setCookie(COOKIE, '1', EXPIRE_DAYS); this.isConsented = true; e.preventDefault(); } } }
quelle
Es ist auch vorteilhaft, Daten in zu speichern
sessionStorage
// Save data to sessionStorage sessionStorage.setItem('key', 'value'); // Get saved data from sessionStorage var data = sessionStorage.getItem('key'); // Remove saved data from sessionStorage sessionStorage.removeItem('key'); // Remove all saved data from sessionStorage sessionStorage.clear();
Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
quelle
Zum Lesen eines Cookies habe ich kleine Änderungen an der Miquel-Version vorgenommen, die für mich nicht funktionieren:
getCookie(name: string) { let ca: Array<string> = document.cookie.split(';'); let cookieName = name + "="; let c: string; for (let i: number = 0; i < ca.length; i += 1) { if (ca[i].indexOf(name, 0) > -1) { c = ca[i].substring(cookieName.length +1, ca[i].length); console.log("valore cookie: " + c); return c; } } return "";
quelle