1

パイプで ID を解決します。

毎回サービス/APIを呼び出すのは最善の方法ではないと思いますか?

すべての国を前に保存した方が良いですか?パイプ内で国名を返すにはどうすればよいですか?

サービス:

getCountry(id:number) {
   return this._http.get(this.apiUrl + "/country/" + id).map(res => res.json());
}

パイプ:

export class ResolvePipe implements PipeTransform {
  constructor(public _formDataService: FormDataService) {}
  transform(value: number, args: any[]): any {
    this._formDataService.getCountry(value).subscribe(
      data => console.log(data[0].name)
    )
  }
}

編集:

<tr (click)="showProfile(customer)" *ngFor="let customer of (customers | search:term)">
   <td>...</td><td>{{customer.country_id | resolve | async}}</td>
</tr>
4

1 に答える 1

1

まず、 を返す必要がありますObservable。呼び出すとsubscribe()aSubscriptionが返されます。また、実際に何かを返す必要があるtransform()ため、追加されたreturn

export class ResolvePipe implements PipeTransform {
  constructor(public _formDataService: FormDataService) {}
  transform(value: number, args: any[]): any {
    // added `return` and changed `subscribe` to `map`
    return this._formDataService.getCountry(value).map(
      data => {
        console.log(data[0].name);
        return data; // with `{ }` explicit `return` is required
      });
    )
  }
}

次に、パイプを次のように使用できます

<div>{{someId | myIdPipe | async}}</div>

また

<some-comp [idProp]="someId | myIdPipe | async></some-comp>

asyncパイプは、返された from をサブスクライブし、Observable結果transformの値をバインディングに使用します。

于 2016-12-22T08:26:08.800 に答える