Служба Angular 6: невозможно получить значение, которое должно быть установлено в конструкторе - PullRequest
0 голосов
/ 09 июля 2019

У меня есть одна служба, один компонент и один преобразователь, как указано ниже.В Конструкторе Сервисов есть несколько кодов, он должен установить значение в Сервисе, тогда, когда я ссылаюсь на определенный путь, Резолвер этого маршрута вызовет определенный Метод Сервиса, и Метод должен иметь возможность прочитать значение, которое уже установлено Конструктором.

Сервис:

@Injectable({
  providedIn: 'root'
})
export class BuildjsonService {

  public currentUser: User;

  constructor() {
    console.log('BuildjsonService constructor');
    this.currentUser = JSON.parse(sessionStorage.getItem('currentUser'));
   }


  genReqContent(fmCode: string, caseKey: string, transKey: string, content: string){
    
    let reqContent : ReqContent = new ReqContent();
    
    console.log('genReqContent=' + JSON.stringify(this.currentUser));
    
    reqContent.bankerId = this.currentUser.loginID;

    return reqContent;

  }

Нажмите на определенном маршруте, выстрелил из розольвера:

@Injectable()
export class GetSubDeptResolver implements Resolve<any> {

  constructor(private httpClient: HttpClient,
              private buildJsonSrv: BuildjsonService){}

  resolve(): Observable<any> {

    <!-- calling service-->
    let reqCont = this.buildJsonSrv.genReqContent('', '', '', content);

    let reqJsonObj: ReqJsonObj = this.buildJsonSrv.genJsonReq(reqCont, new FlowContent(), new TxnInfoContent());
    return this.httpClient.post<any>('http://localhost:2387/utility/GetSubDept', reqJsonObj)

  }

}

Однако, когда Resolver вызывает genReqContent () в Service, значение this.currentUser равно нулю.

Я вижу, что эта служба загружена и конструкторвызывается при запуске приложения, поэтому значение currentUser уже должно иметь значение, однако оно исчезает при использовании позже.

Я что-то не так делаю?Спасибо.

1 Ответ

2 голосов
/ 09 июля 2019

Похоже, что sessionStorage не содержит значения для currentUser на момент создания вашей службы.Вы можете изменить currentUser на метод получения, который вызывает хранилище только тогда, когда это действительно необходимо.Это также даст вам последний экземпляр currentUser в случае изменения его значения (например, в результате обновления токена другой службой).

@Injectable({
  providedIn: 'root'
})
export class BuildjsonService {

  get currentUser() {
    const user = sessionStorage.getItem('currentUser');

    if (user === null) {
      throw new Error('No user found in sessionStorage.');
    }

    return JSON.parse(user) as User;
  }

  constructor() {
    console.log('BuildjsonService constructor');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...