您可以使用以下方法将文档注入您的组件/服务:
import { Component, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(@Inject(DOCUMENT) private document: Document) {}
}
您可以稍后使用
this.document.cookie
您在评论中询问了获取设置删除,但我仍然建议使用 ngx-cookie-service。如果您不想这样做,您可以将这些功能添加到您的组件中:
import { Inject, PLATFORM_ID, InjectionToken, Component } from '@angular/core';
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
private readonly documentIsAccessible: boolean;
constructor(
@Inject( DOCUMENT ) private document: any,
@Inject( PLATFORM_ID ) private platformId: InjectionToken<Object>,
) {
this.documentIsAccessible = isPlatformBrowser( this.platformId );
}
check( name: string ): boolean {
if ( !this.documentIsAccessible ) {
return false;
}
name = encodeURIComponent( name );
const regExp: RegExp = this.getCookieRegExp( name );
const exists: boolean = regExp.test( this.document.cookie );
return exists;
}
get( name: string ): string {
if ( this.documentIsAccessible && this.check( name ) ) {
name = encodeURIComponent( name );
const regExp: RegExp = this.getCookieRegExp( name );
const result: RegExpExecArray = regExp.exec( this.document.cookie );
return decodeURIComponent( result[ 1 ] );
} else {
return '';
}
}
getAll(): {} {
if ( !this.documentIsAccessible ) {
return {};
}
const cookies: {} = {};
const document: any = this.document;
if ( document.cookie && document.cookie !== '' ) {
const split: Array<string> = document.cookie.split(';');
for ( let i = 0; i < split.length; i += 1 ) {
const currentCookie: Array<string> = split[ i ].split('=');
currentCookie[ 0 ] = currentCookie[ 0 ].replace( /^ /, '' );
cookies[ decodeURIComponent( currentCookie[ 0 ] ) ] = decodeURIComponent( currentCookie[ 1 ] );
}
}
return cookies;
}
set(
name: string,
value: string,
expires?: number | Date,
path?: string,
domain?: string,
secure?: boolean,
sameSite?: 'Lax' | 'Strict'
): void {
if ( !this.documentIsAccessible ) {
return;
}
let cookieString: string = encodeURIComponent( name ) + '=' + encodeURIComponent( value ) + ';';
if ( expires ) {
if ( typeof expires === 'number' ) {
const dateExpires: Date = new Date( new Date().getTime() + expires * 1000 * 60 * 60 * 24 );
cookieString += 'expires=' + dateExpires.toUTCString() + ';';
} else {
cookieString += 'expires=' + expires.toUTCString() + ';';
}
}
if ( path ) {
cookieString += 'path=' + path + ';';
}
if ( domain ) {
cookieString += 'domain=' + domain + ';';
}
if ( secure ) {
cookieString += 'secure;';
}
if ( sameSite ) {
cookieString += 'sameSite=' + sameSite + ';';
}
this.document.cookie = cookieString;
}
delete( name: string, path?: string, domain?: string ): void {
if ( !this.documentIsAccessible ) {
return;
}
this.set( name, '', new Date('Thu, 01 Jan 1970 00:00:01 GMT'), path, domain );
}
deleteAll( path?: string, domain?: string ): void {
if ( !this.documentIsAccessible ) {
return;
}
const cookies: any = this.getAll();
for ( const cookieName in cookies ) {
if ( cookies.hasOwnProperty( cookieName ) ) {
this.delete( cookieName, path, domain );
}
}
}
private getCookieRegExp( name: string ): RegExp {
const escapedName: string = name.replace( /([\[\]\{\}\(\)\|\=\;\+\?\,\.\*\^\$])/ig, '\\$1' );
return new RegExp( '(?:^' + escapedName + '|;\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g' );
}
}