问题描述
我正在使用 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 (将#修改为@)