2016-09-09 1 views
1

私はangular2テンプレートに次のコードを書いています。章のリストを生成し、現在の章であるクリックされたプロパティを設定します。angular2要素の複数のテンプレートバインディング

<div class="chapters col s3"> 
    <a *ngFor="let chapter of chapters; let i=index" (click)="clickedItem = i" [class.clicked]="i == clickedItem" class="chapter" 
     [routerLink]="['/tutorial/chapter', chapter.number]">{{chapter.number}}. {{chapter.title}} </a> 
</div> 

問題は、これが唯一のページが最初にロードされたときにチャプターが変更された場合、ルータは、このコンポーネントを更新していない、人口、その章では変更されません「クリック」していることです。

私はおそらく*ngIfを使用して、ルートコンポーネントにサブスクリプションされている自分のコンポーネントのchapterプロパティにバインドすることができると考えていました。次に、クリックされたクラスを持つバージョンを選択します。しかし、この実装は、エラーがスローされます。

<div class="chapters col s3"> 
    <a *ngFor="let chapter of chapters; let i=index" *ngIf="i==chapter" (click)="clickedItem = i" class="chapter clicked" [routerLink]="['/tutorial/chapter', chapter.number]">{{chapter.number}}. {{chapter.title}} </a> 
    <a *ngFor="let chapter of chapters; let i=index" *ngIf="i==chapter" (click)="clickedItem != i" class="chapter" [routerLink]="['/tutorial/chapter', chapter.number]">{{chapter.number}}. {{chapter.title}} </a> 
</div> 

Can't have multiple template bindings on one element. Use only one attribute named 'template' or prefixed with *

私はngForからiを必要として、私は、ngIfプロパティでDIVでこれを包むがどのように機能するかを見ることができませんか?

どのように私はこの作品を作ることができましたか?

+0

http://stackoverflow.com/questions/35100716/angular-2-twoを参照してください。構造上のディレクティブ - 同じ-dom-element- –

+0

クリックした「チャプターが変わらない」という意味は分かりません。 –

+0

@GünterZöchbauerしたがって、チャプター0を読み込んで「0チャプタータイトル」リンクをクリックするとチャプター1に移動しますが、「0チャプタータイトル」は「1.チャプタータイトル" –

答えて

0

私はそれが動作するはずquess:

<ng-template ngFor let-chapter [ngForOf]="chapters" let-i="index"> 
    <a *ngIf="i === chapter">...</a> 
</ng-template> 

またはあなたの代わりにng-templateng-containerを使用することができます。

<ng-container *ngFor="let chapter of chapters; let i = index"> 
    <a *ngIf="i === chapter">...</a> 
</ng-container> 
+0

'i == chapter'は毎回falseにレンダリングしています... –

+0

' {{i}} - {{chapter}} ' – yurzui

関連する問題