2016-11-06 6 views
1

Angular 2 ngIfステートメントで奇妙な問題が発生しました。ページ上に分割して表示されて消えてしまっています。私はそれを見るので働いているが、ページにとどまることは望ましくない。それは奇妙なa-syncのものだと思っています。ここでは、コードです:角度2 ng分割して表示するだけです

<div class="holder"> 
<h2 *ngIf="!this.userHomeService.cards"> 
    You haven't created any cards. 
</h2> 
<div class="card-div" 
*ngFor="let c of this.userHomeService.cards"> 
    <h3 (click)="onSelect(c)">{{c.title}}</h3> 
</div> 

+1

(これは、最も単純な私は仮定1あなたの問題の可能な解決策の一つである) 'ngIf'が表示されてから、次のステートメント、' ngFor'を停止されていません。 'this.userHomeService.cards'が' undefined'であることについて 'ngFor'ステートメントから出てくるコンソールにエラーがありますか? – Claies

+0

どちらかが表示されているようには思われません。カードを追加するとカードが表示されますが、そうでなければ何も表示されません。コンソールエラーが発生しない – Linx

答えて

0

あなたのコントローラーを投稿しませんでしたが、私はそれに何が含まれているかを推測することができます。

  1. this.userHomeService.cardsは未定義またはnullです。したがって、!this.userHomeService.cardsが真であり、「カードを作成していません。」ページに表示されます。反復するものがないので、ngForは何も表示しません。
  2. 非同期リクエスト(おそらくHTTPリクエスト)に対する応答が戻ってきて、空の配列です。したがって、配列は空ですが、!this.userHomeService.cardsはfalseになり、メッセージはページから消えますので、ngForには何も表示されません。
0

divの場合は、を追加して、定義されていない値のエラーを避ける必要があります。

<div *ngIf="this.userHomeService.cards"> 
    <div class="card-div" *ngFor="let c of this.userHomeService.cards"> 
    <h3 (click)="onSelect(c)">{{c.title}}</h3> 
    </div> 
</div> 

ページに最初にYou haven't created any cards.メッセージを表示する(誘い込むフェッチデータ)を避けるために、あなたは、あなたのデータがまだサーバーからロードされていることを示すフラグのいくつかの種類を持っている必要があります。たとえば、次のように

<h2 *ngIf="this.finished && !this.userHomeService.cards"> 
    You haven't created any cards. 
</h2> 

そして、あなたのコントローラにfinished変数を追加し、あなたのhttpリクエストが終了したときにtrueに設定します。

このメッセージは、データの取得が完了したときにのみ表示されます。

+0

'* ngIf'と' * ngFor'を同じ要素で使用することは本当に可能ですか?私はそうは思わない。 – developer033

+0

@Claies、まあ、私は今同じ要素**でそれをテストしました**そして、私はそれがエラーを投げかけると疑っていました: '1つの要素に複数のテンプレートバインディングを持つことはできません。 'template'という名前のアトリビュートだけを使用するか、プレフィックス* 'を使用します。 – developer033

+0

この場合、@ developer033はネストされた要素を使用します(更新された回答) – phts

関連する問題