簡體   English   中英

Angular2中的可觀察對象

[英]Observables in Angular2

以下是我的部分angular2組件模板html。 “ searchTickets $”是對象數組的Observable。

<table class="table table-condensed" *ngIf="searchTickets$">
<thead>
    <tr>
        <th><h3>Ticket ID</h3></th>
    </tr>
</thead>
<tbody>
    <tr *ngFor="let ticket of searchTickets$  | async">
        <td><small>{{ticket.ticketID}}</small></td>     
    </tr>
</tbody>
</table>

我的意圖是僅在可觀察到的返回1個或更多記錄時才顯示該表。

需要在* ngIf條件中進行修改才能使其實現。

正如@ xe4me所說:

<table class="table table-condensed" *ngIf="(searchTickets$ | async)?.length">

應該管用。

不要忘記異步正在訂閱您的可觀察對象。

這意味着具有:

<table class="table table-condensed" *ngIf="searchTickets$">

<tr *ngFor="let ticket of searchTickets$  | async">

將導致兩個不同的訂閱。

如果您在可觀察鏈中的某個位置進行HTTP調用,它將被觸發兩次。

我猜這不是一個很好的選擇。

相反,您應該這樣做:


如果您想處理HTML中的可觀察對象而又不會由於異步觸發而多次觸發可觀察對象

@Component({
  ...
})
export class YourComponent {
  public searchTickets: any;

  constructor(private yourService: any) {
    this.searchTickets = yourService
      .getSearchTicket()
      .share();

    // share allows you to avoid duplicate subscriptions
  }
}

如果您想處理TS中的可觀察物

@Component({
  ...
})
export class YourComponent implements OnDestroy {
  public searchTickets: any;
  private searchTicketsSub: Subscription;

  constructor(private yourService: any) {
    this.searchTickets =
      // let say you have the observable coming from a service that
      // makes an HTTP call 
      yourService
        .getSearchTicket()
        .subscribe((searchTickets: any) => this.searchTickets = searchTickets);
  }

  ngOnDestroy() {
    // then, don't forget to unsubscribe
    this.userSub.unsubscribe();
  }
}

你應該試試

<table class="table table-condensed" *ngIf="(searchTickets$ | async)?.length > 0">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM