2015-12-15 5 views
47

Я искал все вокруг для Углового печенья, но я не смог найти, как реализовать управление cookies в Angular. Есть ли способ управлять файлами cookie (например, $ cookie в AngularJS)?Угловое печенье

+7

Angular2 не имеют какой-либо родной библиотеки/услуги для обработки печенье. Предпочтительным способом является использование JWT/LocalStorage. https://github.com/auth0/angular2-authentication-sample –

ответ

52

Я закончил создание своих собственных функций:

@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(); 
     } 
    } 
} 
+2

сделать его инъекционным в следующий раз :) –

+5

Возможно, вы могли бы опубликовать собственное решение с функциональностью для инъекций, что было бы здорово для других, которым это нужно для инъекций :) – Miquel

+0

должны быть компонентом? Почему бы вам не сделать инъекционную услугу? –

10

Да, вот один NG2-печенье

Использование:

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'); 
+1

Их API изменился, вот документы: https://github.com/BCJTI/ng2-cookies/wiki/Minimum-running-example – etayluz

28

Вот angular2-cookie, который является точной реализации Угловое 1 $cookies обслуживание (plus a removeAll() способ). Он использует те же методы, которые реализованы только в машинописном тексте с логикой Angular 2.

Вы можете вводить его в качестве службы компонентов providers массива:

import {CookieService} from 'angular2-cookie/core'; 

@Component({ 
    selector: 'my-very-cool-app', 
    template: '<h1>My Angular2 App with Cookies</h1>', 
    providers: [CookieService] 
}) 

После этого, определить его в consturctur, как обычно, и начать использовать:

export class AppComponent { 
    constructor(private _cookieService:CookieService){} 

    getCookie(key: string){ 
    return this._cookieService.get(key); 
    } 
} 

Вы можете получить его с помощью NPM:

npm install angular2-cookie --save 

EDIT: angular2-cookie теперь осуждается. Вместо этого используйте ngx-cookie.

+1

Какая разница с ng2-cookie? – Miquel

+0

Использует угловую логику и методы за кулисами. Так что это более угловато. Также он имеет все методы из службы cookie $ плюс метод удаления всех методов. Также он предоставляет глобальные параметры и параметры. И это услуга. –

0

Для чтения печенье я сделал небольшие модификации версии Микеля, что не работает для меня:

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 ""; 
Смежные вопросы