Búsqueda de sitios web

Asociar valor JSON de Angular a ruta de imagen


Tengo que mostrar datos que provienen de una API que funciona bien, necesito mostrar cada país con su bandera correspondiente pero no entiendo cómo asociar el valor de un JSON con la ruta de una imagen.

ejemplo: para el

libelle: Camboya bigrama: KH

mostrar: src/assets/flags/KH.jpg

libelle: Francia bigramme: FR

mostrar: src/assets/flags/FR.jpg

He tratado de ser lo más claro posible.

gracias.

json

"drapeaux": [
    {
      "id": 1,
      "mnemo": "KHM",
      "libelle": "Cambodge",
      "bigramme": "KH"
    },
    {
      "id": 2,
      "mnemo": "KHM",
      "libelle": "France",
      "bigramme": "FR"
    }
  ]
}

servicio

getAll(): Observable<Ipost[]> {
    return this.http.get<Ipost[]>(this.api);
  }

componentes.ts

 getAllNations() {
    let resp = this.homeService.getAll();
    resp.subscribe(result => {
      this.postArray = result;
    });
  }

html

<div class="col-12">
      <mat-card>
        <div class="row">
          <div class="col-1" *ngFor="let post of postArray">
            {{post.libelle}}
            <img [src]="post.bigramme.jpg" alt="flag">
          </div>
        </div>
      </mat-card>
    </div>

Respuesta #1

Tienes dos opciones:

Opción 1: En su servicio:

getAll(): Observable<Ipost[]> {
  return this.http.get<Ipost[]>(this.api).pipe(
    map(p => ({
      ...p,
      bigramme: `src/assets/flags/${p.bigramme}.jpg`
    }))
  )
}

Y luego el HTML de tu componente:

<div class="col-12">
  <mat-card>
    <div class="row">
      <div class="col-1" *ngFor="let post of postArray">
        {{post.libelle}}
        <img [src]="post.bigramme" alt="flag">
      </div>
    </div>
  </mat-card>
</div>

Opción 2: O puedes cambiar solo el html de tu Componente:

<div class="col-12">
  <mat-card>
    <div class="row">
      <div class="col-1" *ngFor="let post of postArray">
        {{post.libelle}}
        <img src="src/assets/flags/{{ post.bigramme }}.jpg" alt="flag">
      </div>
    </div>
  </mat-card>
</div>