2017-04-23 42 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)。在这种情况下,我不能使用你的方法,该怎么办? –