2017-08-28 8 views
1

こんにちは私は特定のパネルを切り替えたいですが、ボタンをクリックすると他のオブジェクトのパネルが開きます。クリックしたパネルを開くにはどうすればよいですか?ngForループ内の特定のパネルを1つだけ切り替えます。

toggle.component.ts

opened:Boolean=false; 
toggle() { 

    this.opened = !this.opened; 
    } 

HTML

<div class="main" *ngFor="let x of data; let i=index;"> 
<footer> 

    <div class="icons"> 
    <span id="{{item.id}}" (click)="toggle()">6<i class="fa fa-users {{i}}" ></i></span> 
    <span >6<i class="glyphicon glyphicon-picture"></i></span> 
    <span >6<i class="glyphicon glyphicon-tag"></i></span> 
    <div class="iconsRight pull-right"> 
    <span >EXIF<i class="glyphicon glyphicon-info-sign"></i></span> 
    <span ><i class="fa fa-map-marker"></i></span> 
    <span ><i class="fa fa-share-alt-square"></i></span> 
    </div> 
    </div> 

</footer> 

<div class="togglePanel{{item.id}}" *ngIf="opened" > 
    <hr/> 
    <ul class="toggleWrapper"> 
    <li>YES</li> 
    <hr/> 
    <li>YES</li> 
    <hr/> 
    <li>YES</li> 
    <hr/> 
    <li>YES</li> 

    </ul> 
</div> 
</div> 

enter image description here

答えて

1

個々のパネルの現在、すべてのパネルを切り替える変数を1つだけ設定しています。以下に、あなたのhtmlを、次に

togglePanel: any = {}; 

変更:あなたのtoggle.component.ts

、すべての項目の状態を格納する変数を追加します。また

<div class="main" *ngFor="let x of data; let i=index;"> 
    <footer> 
     <div class="commentAgent">Text des Bewerters, der die Bearbeitung dieses Bildes vorgenommen hat</div> 
     <div class="icons"> 
      <span id="{{item.id}}" (click)="togglePanel[i] = !togglePanel[i]">6<i class="fa fa-users {{i}}" ></i></span> 
      <span>6<i class="glyphicon glyphicon-picture"></i></span> 
      <span>6<i class="glyphicon glyphicon-tag"></i></span> 
      <div class="iconsRight pull-right"> 
       <span>EXIF<i class="glyphicon glyphicon-info-sign"></i>/span> 
       <span><i class="fa fa-map-marker"></i></span> 
       <span><i class="fa fa-share-alt-square"></i></span> 
      </div> 
     </div> 
    </footer> 
    <div class="togglePanel{{item.id}}" *ngIf="togglePanel[i]"> 
     <hr/> 
     <ul class="toggleWrapper"> 
      <li>YES</li> 
      <hr/> 
      <li>YES</li> 
      <hr/> 
      <li>YES</li> 
      <hr/> 
      <li>YES</li> 
     </ul> 
    </div> 
</div> 

は、あなたがtoggle()方法を必要としないとこのアプローチでは変数openedが使用されます。

+0

大丈夫ですが、上の画像をご覧ください。右の視界のパネルも開きます。内容がなければ –

+0

どのような変更を加えましたか? – Faisal

+1

申し訳ありませんが私の間違い。私はスタッフの周りにラッパーのdivを持っていた –

1

開いただけで1つのパネルが必要な場合は、このメソッドは動作します。あなたの 'フラグ'プロパティブール値を設定する代わりに、numberを使用します。それはパネルIDを保持します。パネルIDに設定して、あなたのデータに追加のプロパティを必要はありません。

活字体:

opened = -1; 
toggle (index) { 

    this.opened = index; 
} 

HTML:あなたは状態を保存する必要が

.... 
    <span id="{{item.id}}" (click)="toggle(item.id)">6<i class="fa fa-users {{i}}" ></i> 
... 

<div class="togglePanel{{item.id}}" *ngIf="opened===item.id" > 
+1

また、多くの理由でパネルの状態を管理するサービスを使用する方がよいでしょう。 主に、別のコンポーネントが状態を切り替える必要がある場合は、より良いことです。 –

+0

これは、ユーザーが1つのパネルだけを開くことを望む場合にうまく機能します。 OPの質問から私は個々のパネルのトグルが必要であることを理解しています。アコーディオンではなく、拡張パネルのようなものです。 – Faisal

+0

@Faisal、本当ですが、私は次のように読んでいます:「1つの特定のパネルを切り替えたい」 – Vega

関連する問題