2017-04-23 75 views
0

我想添加一個條件類到div,雖然它似乎到目前爲止,如果我點擊一個特定的按鈕它添加到它基於條件(這很好)的類,然而,當我點擊同一頁面上的另一個按鈕(具有相同的條件)時,該類將從第一個中移除並分配給第二個。Angular2 - 問題與[ngClass]

的通緝行爲:

當上的按鈕點擊,然後在另外一個點擊,它不應該從第一個刪除類。單純地喜歡在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

哪裏是'updateBtnWithId'設置? –

+0

@suraj在ngClass裏面,它在代碼端聲明爲字符串 –

+0

檢查我的答案.. –

回答

0

您需要重新審視您的邏輯。 發生這種情況是因爲您的所有按鈕都有一個常見的布爾變量clicked和常見的編號爲updateBtnWithId。這意味着只有一個帖子可以一次設置課程。

您可能需要一個變量數組來跟蹤列表中的按鈕:clicked[]。 或者對於您的示例,您在設置該類的帖子列表中的每個review對象中都有一個liked屬性。

如:

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

在課堂

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

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

我相信你的方法存在的問題是,一旦你點擊一個按鈕,該類將被添加到所有其他的... –

+0

你正在調用like()其中一個從列表中的對象,只將其屬性設置爲true ..並在每個按鈕'div'的模板中檢查特定對象的屬性。 –

+0

我忘記提及的是'review'是一個從後端生成的JSON值。因此,在這種情況下不可能使用'review.liked',因爲我想用新的數字更新後端,所以我將它傳遞給(review.objectId)。在這種情況下,我不能使用你的方法,該怎麼辦? –