我正在使用Angular 6和Bootstrap。我正在尝试使用document.getElementsByClassName
单击(更改其大小)后更改类名称。我使用*ngFor
创建了我的元素。点击它们后coinDetails(coin,i)
功能开始工作。
现在,点击元素后会增加大小(类更改为:col-lg-2 col-md-2 col-sm-12 col-xs-12 resize
),然后在第二次单击同一元素后,它会减小大小(类更改为:col-lg-3 col-md-3 col-sm-12 col-xs-12 resize
) ,正如我想的那样。
但是,当我点击一个元素然后点击另一个元素(index
更改)时,第一个元素会保持增加。
我不知道,如何检测变量index
是否发生变化。
也许截图会更好地解释它。 在这种情况下,我点击了开始时的'LTC'框,然后点击'STRAT'框。 'STRAT'增加了规模,但'LTC'也保持扩大,虽然它不再是活跃的。 我希望这个'LTC'盒子与'ZEC'相同,或者在它停止活动之后'BTE'。
coinDetails(coin, index) {
if (this.detailToggle[index]) {
this.detailToggle[index] = false;
this.col = document.getElementsByClassName("resize")[index];
this.col.className = "col-lg-2 col-md-2 col-sm-12 col-xs-12 resize";
} else {
this.col = document.getElementsByClassName("resize")[index];
this.col.className = "col-lg-3 col-md-3 col-sm-12 col-xs-12 resize";
this.detailToggle.fill(false);
this._data.getCoin(coin).subscribe(res => {
this.details = res["DISPLAY"][coin]["USD"];
this.detailToggle[index] = true;
this._data.getChart(coin).subscribe(res => {
let coinHistory = res["Data"].map(a => a.close);
setTimeout(() => {
this.chart[index] = new Chart("canvas" + index, {
type: "line",
data: {
labels: coinHistory,
datasets: [
{
data: coinHistory,
borderColor: "#3cba9f",
fill: false
}
]
},
options: {
tooltips: {
callbacks: {
label: function(tooltipItems, data) {
return "$" + tooltipItems.yLabel.toString();
}
}
},
responsive: true,
legend: {
display: false
},
scales: {
xAxes: [
{
display: false
}
],
yAxes: [
{
display: false
}
]
}
}
});
}, 250);
});
});
}
}
答案 0 :(得分:1)
尽量避免在Angular上使用DOM操作,而是使用ngClass(https://angular.io/api/common/NgClass),在你的html中你应该有这样的东西:
<div *ngFor="let coin of coins">
<div [ngClass]="coinStyle(coin.coinStatus)" (click)="coinDetails(coin, index) || coin.coinStatus=!coin.coinStatus">
</div>
</div>
在组件上,类似这样:
coinStyle(status): string {
if (status) {
return 'col-lg-2 col-md-2 col-sm-12 col-xs-12 resize';
} else {
return 'col-lg-3 col-md-3 col-sm-12 col-xs-12 resize';
}
}
并删除coinDetails函数上的DOM操作。
this.col = document.getElementsByClassName("resize")[index];
this.col.className = "col-lg-3 col-md-3 col-sm-12 col-xs-12 resize";
this.col = document.getElementsByClassName("resize")[index];
this.col.className = "col-lg-3 col-md-3 col-sm-12 col-xs-12 resize";
(那4行)。
对不起,但由于你没有分享你的HTML,我无法给你更好的指导。