Angular2-与[ngClass]一起发布

Angular2-与[ngClass]一起发布,angular,Angular,我试图将一个条件类添加到div中,但到目前为止,如果我单击某个特定按钮,它会根据条件(这很好)将类添加到该按钮中,但是,当我单击同一页面上的另一个按钮(具有相同条件)时,该类会从第一个按钮中删除并分配给第二个按钮 被通缉的行为: 当单击一个按钮,然后单击另一个按钮时,它不应该从第一个按钮中删除该类。就像在Facebook上一样(点击一篇文章的like按钮,然后你可以转到另一篇文章,点击like按钮,等等) HTML <div class="agreeBtn" (click)="like(r

我试图将一个条件类添加到
div
中,但到目前为止,如果我单击某个特定按钮,它会根据条件(这很好)将类添加到该按钮中,但是,当我单击同一页面上的另一个按钮(具有相同条件)时,该类会从第一个按钮中删除并分配给第二个按钮

被通缉的行为:

当单击一个按钮,然后单击另一个按钮时,它不应该从第一个按钮中删除该类。就像在Facebook上一样(点击一篇文章的
like
按钮,然后你可以转到另一篇文章,点击
like
按钮,等等)

HTML

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

你需要重新审视你的逻辑。 之所以会发生这种情况,是因为您单击了一个公共布尔变量
,并为所有按钮设置了一个公共id
updateBtnWithId
。这意味着一次只能有一个帖子可以设置类

您需要一个变量数组来跟踪列表中的按钮:
单击[]
。 例如,在设置类的帖子列表中的每个
review
对象中都有一个
liked
属性

例如:


updateBtnWithId
set在哪里?@suraj在ngClass中,它在代码侧声明为字符串检查我的答案..我的答案仍然适用。。如果不清楚请告诉我不幸的是,对我来说不太清楚。你说过一些关于
like
属性的东西,我的代码中没有它。我相信你的方法的问题是,一旦你点击一个按钮,该类将被添加到所有其他类中…你正在调用
like()
使用列表中的一个对象,只将其属性设置为true。。在每个按钮的模板中,
div
检查特定对象的属性。。我忘了提到的是,
review
是从后端生成的JSON值。因此,不可能使用
review.liked
在本例中,我将它传递到like(review.objectId)中,因为我想用新的编号更新后端。在这种情况下,我无法使用您的方法,该怎么办?在这种情况下,您将不得不使用我的第一点..这是一个黑客解决方案..您必须有一个类似的布尔
列表/数组
,您可以使用与列表长度相同的obj.id进行跟踪posts@HamzaL. 无论哪种方式,您都需要重构并重新审视现有的逻辑
like(objId){

   this.updateBtnWithId = objId;

 if(this.updateBtnWithId === objId){
        this.clicked = true;
  }
}
<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;
  }*/
}