Angular-HttpClient: сопоставить объект со свойствами массива - PullRequest
0 голосов
/ 06 июля 2018

Я вызываю API, который возвращает мне объект JSON. Мне нужно сопоставить этот объект с массивом.

Ниже приведен мой код, но после вызова API я не получаю ни ответа, ни ошибки.

export class Features {
  MenuId: number;
  MenuName: string;
  Description: string;
  RoutePath: string;
}

featureList: Features[] = [];
 constructor(private http: HttpClient)

 getFeatureListByLoggedInUser(userID: number) { debugger;       
    return this.http.get(this.myAppUrl + "api/Employee/GetMenusByUID/" + userID)     
      .pipe(
      map(
        (data: any[]) => {
        debugger;
        this.featureList = data;
        //return true;
      }), catchError(error => {
        debugger;
        return throwError('Something went wrong!')
      })
    );
 }

Также попробовал приведенный ниже код, но он дает мне ошибку:

Тип объекта не может быть присвоен типу 'any []'

 featureList: Array<any> = [];

 getFeatureListByLoggedInUser(userID: number) { debugger;  
    return this.http.get(this.myAppUrl + "api/Employee/GetMenusByUID/" + userID)
      .subscribe(
        data => {
          debugger;
          this.featureList = data;            
      });
 }

Редактировать:

 return this.http.get<Array<Features>>(this.myAppUrl + "api/Employee/GetMenusByUID/" + userID)   
      .subscribe(
        data => {
          debugger;
          //this.featureList = data;  
      });

1 Ответ

0 голосов
/ 06 июля 2018

Вы не возвращаетесь с .map(). Вы должны вернуть this.featureList из службы

getFeatureListByLoggedInUser(userID: number) { debugger;       
    return this.http.get(this.myAppUrl + "api/Employee/GetMenusByUID/" + userID)     
      .pipe(
      map(
        (data: any[]) => {
        debugger;
       return this.featureList = data;
      }), catchError(error => {
        debugger;
        return throwError('Something went wrong!')
      })
    );
 }

EDIT

Также map кажется ненужным в вашем коде, потому что вы не манипулируете внутри чего-либо. Вы можете снять это и оставить catchError для обработки ошибок.

getFeatureListByLoggedInUser(userID: number) {       
    return this.http.get(this.myAppUrl + "api/Employee/GetMenusByUID/" + userID)     
      .pipe(
           catchError(error => {
            return throwError('Something went wrong!')
      })
    );
 }

А в твоем компоненте

this.service.getFeatureListByLoggedInUser(id)
      .subscribe(data => { this.featureList = data })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...