如何解决Angular 9-ngx-cookie-service路径问题
我正在使用 ngx-cookie-service 包来存储一些与我的应用程序相关的数据。
我需要将此Cookie保存在基本路径'/'
上,因此每次我确切地知道如何检索它。
我的这个Cookie需要更新,并且当这种情况发生时,新的Cookie必须存储在同一路径中(因此位于'/'
中)。问题是有时刷新页面时,新的cookie被保存在新路径中,因此当我尝试使用this.cookieService.get(cookieName,'/')
进行检索时,它显然会失败。即使我明确声明将'/'
用作 path ,也会发生这种情况。它并不总是发生,这会导致调试更加困难。
这是我使用Cookie的服务
const urlParamsCookieName = 'errepiuapp-url-params';
/**
* This service keeps track of the keys used to retrieve objects from the backend.
*/
@Injectable({
providedIn: 'root'
})
export class KeyLookupService {
private _lookupUrlSegments = ['students','macro','lto','sto','reports'];
private _paramsMap$: BehaviorSubject<Map<string,any>>;
private get paramsMap() {
return this._paramsMap$.getValue()
}
constructor(
private cookieService: CookieService,private router: Router
) {
if (!this.router.url.includes('auth') && !this.cookieService.check(urlParamsCookieName)) {
this.router.navigate(['/auth']);
}
this._paramsMap$ = new BehaviorSubject<Map<string,any>>(
new Map<string,any>(
this.cookieService.check(urlParamsCookieName) ?
this.getParamsFromCookie().map((value,i) => [this._lookupUrlSegments[i],value]) :
this._lookupUrlSegments.map(segment => [segment,null])
)
);
this._paramsMap$.subscribe(_ => {
this.updateCookie(); //*********** PROBLEM HERE ***********
});
this.router.events.pipe(
filter(event => event instanceof NavigationEnd),map(event => {
this.updateCookie(); //*********** PROBLEM HERE ***********
})
).subscribe();
this.updateCookie(); //*********** PROBLEM HERE ***********
}
addParam(key: string,value: any) {
this._paramsMap$.next(this.paramsMap.set(key,value));
}
public getParams(...lookupKeyword: string[]): Map<string,any> {
if (lookupKeyword) {
return new Map<string,any>([...this.paramsMap.keys()]
.filter(key => lookupKeyword.includes(key))
.map(key => [key,this.paramsMap.get(key)]));
}
return this.paramsMap;
}
private getParamsFromCookie(): any[] {
return Array.from(this.cookieService.get(urlParamsCookieName).split(','));
}
private updateCookie() {
if (this.cookieService.check(urlParamsCookieName)) {
this.cookieService.delete(urlParamsCookieName,'/');
}
this.setCookie();
}
private setCookie() {
this.cookieService.set(urlParamsCookieName,[...this.paramsMap.values()].toLocaleString(),undefined,'/');
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。