组件在Angular中单击时,它会将整个阵列作为选定对象,而不仅仅是一次



我正在Angular中实现一个评级组件,我将在另一个组件中使用它来对语言进行评级。我的意思是它有多好。

我的问题是,当我听到一个数组的点击事件时,我会自动选择第二个数组并同时给它们两个,或者用颜色填充两个数组。可以只单击一个事件并为其提供数据。我所基于的星形组件的代码就是这个stackblitz。

https://stackblitz.com/edit/angular-material-star-rating-kptyy2?file=app%2Fapp%2Fapp.component.html
这是我的star组件。

<button mat-icon-button *ngFor="let ratingId of ratingArr;index as i" [id]="'star_'+i" (click)="onClick(i+1)"
>
<mat-icon>
{{showIcon(i)}}
</mat-icon>
</button>
<mat-error *ngIf="starCount == null || starCount == 0">
</mat-error>
export class StarRatingComponent implements OnInit {
@Input("rating") private rating = 3;
@Input("starCount") public starCount = 5;
@Output() private ratingUpdated = new EventEmitter();
public ratingArr = [];
constructor() {
}
ngOnInit() {
for (let index = 0; index < this.starCount; index++) {
this.ratingArr.push(index);
}
}
onClick(rating: number) {
this.ratingUpdated.emit(rating);
return false;
}
showIcon(index: number) {
if (this.rating >= index + 1) {
return "star";
} else {
return "star_border";
}
}
}

这就是我试图展示并填充数据的组件。

<div *ngFor="let language of subCategory.languages; let i = index">
<div class="col-md-8">
{{language.name}}
<app-star-rating [rating]="language.rate" [starCount]="starCount" (ratingUpdated)="onRatingChanged($event)"></app-star-rating>
</div>
</div>
onRatingChanged(rating) {
this.skills.subCategories.map(test => test.languages.filter(res => {
console.log(res.name);
res.rate = rating;
}));
}

您可以在onRatingChanged函数中传递HTML中的索引以及如下事件:

<div *ngFor="let language of languages; let i = index">
<div class="col-md-8">
{{language.name}}
<mat-star-rating [rating]="language.rate" [color]="starColor" (ratingUpdated)="onRatingChanged($event,i)"></mat-star-rating>
</div>
</div>

相关内容

最新更新