Angular 列表顺序更改为7
我有一段代码,它为列表“titles”中的每个对象调用api,并将该对象添加到另一个列表“groupDocs”。但由于api的响应不是即时的,所以对象在列表“groupDocs”中的顺序会发生变化。我该怎么做才能保持同样的秩序 我找不到解决这个问题的办法,而且我是个新手Angular 列表顺序更改为7,angular,typescript,angular7,Angular,Typescript,Angular7,我有一段代码,它为列表“titles”中的每个对象调用api,并将该对象添加到另一个列表“groupDocs”。但由于api的响应不是即时的,所以对象在列表“groupDocs”中的顺序会发生变化。我该怎么做才能保持同样的秩序 我找不到解决这个问题的办法,而且我是个新手 public getDetails(titles: ErrorTitleData[]): void { for (const title of titles) { const showButtons: b
public getDetails(titles: ErrorTitleData[]): void {
for (const title of titles) {
const showButtons: boolean = false;
const details: controlErrordetailsData[] = [];
const criteria: SearchCriteriaControlData = {
aggFields: ['Famille', 'Sous-Famille', 'Date', 'Controle', 'erreur'],
page: 0,
step: 20,
selectedValues: {},
queryString: ''
};
criteria.selectedValues['Sous-Famille'] = [title.sf ? title.sf : ''];
criteria.selectedValues['Date'] = [title.dateVerif ? title.dateVerif : ''];
criteria.selectedValues['Controle'] = [title.typeVerif ? title.typeVerif : ''];
this.controlErrorService.getErrorControl(criteria).subscribe(
(data) => {
data.hits.forEach(element => {
const detail: controlErrordetailsData = new controlErrordetailsData(element);
details.push(detail);
});
this.groupDocs.push(new GroupDoc(title, details, criteria, data.total));
},
(error) => {
this.toastService.update(ToastService.TYPE_ERROR,
'Une erreur est survenue lors du chargement de la liste des contrôle d\'erreurs');
}
);
}
}
如前所述,您应该按标题对列表进行排序。这可以在TS代码中完成:
this.groupDocs.push(new GroupDoc(title, details, criteria, data.total));
this.groupDocs = this.groupDocs.sort((doc1, doc2) => doc1.getTitle().localeCompare(doc2.getTitle()));
或者,使用模板中的自定义管道更好:
ngFor*="let doc of groupDocs | sortByTitle"
您可以了解如何创建这样的管道。不要忘记将管道添加到数组中。什么是“订单更改”?新项目以随机位置出现?所需的行为是什么?您应该根据特定的排序规则对列表进行排序。当调试循环逐项启动时,它会调用“this.controlErrorService.getErrorControl(Criterias)”,在第五项中,我开始得到响应,第五个元素被添加到groupdocs列表中。我想要的是保持顺序。此行为会更改对象的顺序