Почему я получаю значение undefined, если значение присутствует в конструкторе? - PullRequest
0 голосов
/ 08 мая 2020

Есть сервис с переменной findbyobjectidlatest$:

@Injectable({
  providedIn: "root",
})
export class ConstructionObjectsDataService {    
  constructor(
    private httpClient: HttpClient,
    private parametersService: ParametersService
  ) {
    console.log(this.parametersService.findbyobjectidlatestFilter);
  }

    findbyobjectidlatest$ = this.httpClient.get<any>(
    `${environment.apiUrl}/${this.URL_PATH}/findbyobjectidlatest?objectid=${this.parametersService.findbyobjectidlatestFilter.parameters.objectid}`
  );

}

Почему значение представлено в конструкторе: console.log(this.parametersService.findbyobjectidlatestFilter); как:

{ parameters: {objectid: "08438F2E01384371BFED6E282950C054"}}

Но в строке http оно не определено запрос клиента:

${this.parametersService.findbyobjectidlatestFilter.parameters.objectid}

Если переместить все переменные в конструкторе, я могу получить объект в конструкторе:

1

Но почему я все еще не определен:

console.log(this.parametersService.findbyobjectidlatestFilter.parameters.objectid);

1 Ответ

0 голосов
/ 08 мая 2020

член findbyobjectidlatest $ инициализирован перед конструктором

вы можете сделать следующее

@Injectable({
  providedIn: "root",
})
export class ConstructionObjectsDataService {    

  constructor(
    private httpClient: HttpClient,
    private parametersService: ParametersService
  ) {
  }

  getQuery() {
    const vals = this.parametersService.findbyobjectidlatestFilter;
    console.log(vals);
    const parameters = vals.parameters;
    console.log(parameters);
    const objectid = parameters.objectid;
    console.log(objectid);

    const apiUrl = `${environment.apiUrl}`;
    const URL_PATH = `${this.URL_PATH}`;
    const objectid = `/findbyobjectidlatest?objectid=${objectid}`;
    const url = apiUrl + URL_PATH + objectid ;
    console.log(apiUrl, URL_PATH, objectid);

    return this.httpClient.get<any>(url);
  }
}

в случае, если parametersService или другие параметры не готовы в момент вызова конструктора, вы можете получить запрос из метода

...