Есть ли способ получить доступ к переменной из interceptor.service.ts в файле server.ts в angular 6 universal? - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно получить доступ к переменной this.cacheFlag из interceptor.service.ts в файл server.ts в корневом каталоге моего приложения.

return next.handle(this.authReq).pipe(
    tap((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        this.reqArray.push(event.status);
        this.cacheFlag = true; //this is the variable I want to access in server.ts file

      }
    }),
    catchError((error, caught) => {
      //intercept the response error and displace it to the console
      if (error instanceof HttpErrorResponse) {
        if(error.url.indexOf("detail?referenceCode=") == -1){
          this.reqArray.push(error.status);
          this.cacheFlag = false; //this is the variable I want to access in server.ts file
        }
   })
      

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

попробуйте использовать общую службу, а затем подписаться на значение в вашем server.ts, например, создать общую службу с этим кодом

cacheFlag = new Observable<boolean>(false);
_cacheFlag = this.cacheFlag.asObservable();


nextValue(val) {
  this.cacheFlag.next(val);
}

, а затем в конструкторе вашего interceptor.ts и сервера.добавьте это, а также переменную для назначения значения, на которое подписывается ваша общая служба

cf: boolean;

constructor( private ss: SharedService ) {
   ss._cacheFlag.subscribe(value => this.cf = value)
}

и, наконец, в вашем перехватчике .ts

return next.handle(this.authReq).pipe(
    tap((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        this.reqArray.push(event.status);
        this.ss.nextValue(true); //change this part

      }
    }),
    catchError((error, caught) => {
      //intercept the response error and displace it to the console
      if (error instanceof HttpErrorResponse) {
        if(error.url.indexOf("detail?referenceCode=") == -1){
          this.reqArray.push(error.status);
          this.ss.nextValue(false) //change this part
        }
   })

значение изменится ви ваш interceptor.ts, и ваш server.ts Я надеюсь, что это помогло.

0 голосов
/ 25 октября 2018

Сделайте вашу переменную статической:

export class MyInterceptorService {
  static cacheFlag;

  intercept(...) {
    ...
    if (MyInterceptorService.cacheFlag) {
      // Cache
    }
  }
}
...