2017-04-23 15 views
0

divに条件付きクラスを追加しようとしていますが、特定のボタンをクリックすると、その条件に基づいてクラスが追加されます(これは問題ありません)。しかし、同じページ上の別のボタン(同じ条件を持つ)をクリックすると、クラスは最初のクラスから削除され、2番目のクラスに割り当てられます。Angular2 - [ngClass]の問題

望ましい動作:

ボタンをクリックすると、その後、別の1つをクリック、それは最初の1からクラスを削除しないでください。単にFacebook上でのように(あなたはポストのlikeボタンをクリックし、その後、別のポストに行くことができると、likeボタンをクリック等。)

HTML

<div class="agreeBtn" (click)="like(review.objectId)" [ngClass]="{'agreeBtnClicked': updateBtnWithId === review.objectId && clicked}">I agree</div> 

.TS

like(objId){ 

    this.updateBtnWithId = objId; 

if(this.updateBtnWithId === objId){ 
     this.clicked = true; 
    } 
} 
+0

<div class="agreeBtn" (click)="like(review)" [ngClass]="{'agreeBtnClicked': review.liked}">I agree</div> 

? –

+0

@suraj inside ngClass、それはコード側で文字列として宣言されています –

+0

私の答えを確認してください。 –

答えて

0

ロジックを再訪する必要があります。 これは、すべてのボタンに対して共通のブール変数clickedと共通のID があるために発生しています。これは、一度に1つの投稿のみがクラスを設定できることを意味します。

リスト内のボタンをトラッキングする変数の配列が必要です(clicked[])。 または、あなたの例では、クラスを設定する投稿一覧の各reviewオブジェクトにlikedというプロパティがあります。

例: `updateBtnWithId`が設定されているクラス

like(obj){ 
    obj.liked=true; 
    //this.updateBtnWithId = objId; 

/* if(this.updateBtnWithId === objId){ 
     this.clicked = true; 
    }*/ 
} 
+0

私はあなたのアプローチの問題は、一度ボタンをクリックすると、クラスは他のすべてのクラスに追加されると信じています... –

+0

あなたは 'like()'をそのリストのオブジェクトの1つだけをtrueに設定します。また、各ボタンの「div」のテンプレートでは、特定のオブジェクトのプロパティをチェックしています。 –

+0

「忘れていたことは、バックエンドから生成されたJSON値。この場合、 'review.liked'を使用することはできません。新しい番号でバックエンドを更新したいので、私はlike(review.objectId)のように内部に渡しています。この場合、私はあなたの方法を使用することはできません、どうすればいいですか? –