我有以下 html 片段
<ul>
<li *ngFor="let report of searchResult.reports let i = index;">
<input type="checkbox" [(ngModel)]="report.reportChecked" (click)="selectedReport(report, i)">
<p kf-text weight="heavy" [ngClass]="{'bgColor': showBgd}">{{ report.name }}</p>
</li>
</ul>
和
<ul>
<li *ngFor="let language of languages" (click)="selectedLang(language)">
{{ language.name }}
<li>
<ul>
当我单击一个或多个特定报告然后选择一种语言时,我需要将类 bgColor 添加到没有该语言的一个或多个报告中。
示例:我有 3 份报告:报告 1(英语)、报告 2(西班牙语)、报告 3(英语、法语)
和 3 种语言:英语、西班牙语、法语
如果我检查报告 1和报告 2分别仅提供英语和西班牙语版本,并从下拉列表中选择语言英语 ,则需要将bgColor 类添加到报告 2,因为它在所选语言中不可用,在此案例英文。如果我检查Report 1和Report 3并且选择了语言西班牙语,则需要将类bgcolor添加到 Report 1 和 Report 3元素中。如果选择了英语,该类将不会添加到任何元素中,因为两者都有英语。最重要的是,无论检查哪个报告,如果它在所选语言中不可用,则将添加 bgColor 类。如果它是可用的类将不会被添加。可以随意检查或取消检查报告。
以下是打字稿片段
selectedReport(report, index) {
if(report.reportChecked) {
this.selectedReports.push({
type: report.type,
name: report.name,
reportChecked: report.reportChecked
});
this.indexItems.push(index);
} else {
this.selectedReports = _.reject(this.selectedReports, (el) => {
return el.type === report.type;
});
let indexRemove = this.indexItems.indexOf(index);
if(indexRemove > -1) {
this.indexItems.splice(indexRemove, 1);
}
}
}
selectedLang(language) {
let reportType;
let reportLanguage;
this.selectedLanguage = language;
this.selectedReports.forEach((report) => {
if (report.reportChecked) {
reportType = this.reportsWithLang.find((checkedReport) => {
return checkedReport.type === report.type;
});
reportLanguage = reportType.languages.find((language) => {
return language.id === this.selectedLanguage.id;
});
if(!reportLanguage) {
this.showBgd= true;
} else {
this.showBgd= false;
}
}
});
}
在我当前的实现中,当检查报告 1 并选择语言英语时,不添加 bgColor 类。但是,如果选择了英语以外的语言,例如西班牙语,则 bgColor 类将添加到所有报表元素中,即使只选中了报表 1。再次保持 Report 1 被选中并且语言选择为西班牙语,如果 Report 2 现在被选中,类 bgColor 将从所有元素中删除,尽管该类应该添加到 Report 1 元素中。我尝试了很多不同的方法,但仍然无法提出解决方案。对此的任何帮助将不胜感激。