【发布时间】:2019-04-26 17:25:36
【问题描述】:
大家好,我遇到的问题是,当我将一个项目添加到数组中时,离子芯片正在被正确渲染和添加。每当我单击芯片时,就会从数组中删除值,这很棒!但是,芯片仍保留在屏幕上。
好吧,我正在做的部分是一个搜索组件,搜索组件有一个高级搜索选项。从那里选择的所有选项都被发送到搜索服务,然后将值添加或删除到数组中,并且搜索组件具有一个 getter 函数,该函数从服务获取数组并将其添加到其自己的数组中,搜索组件的 html 文件来自该数组做一个*ngFor。我一直在阅读this 和this。虽然后者是最接近的,但我实际上并没有将任何东西传递给孩子。现在......您可能对自己说“嘿!!!这听起来像是您在重新发明轮子并且可以使用ngrx进行状态管理”在这种情况下您是正确的,但我无法使用它。我已经尝试过可观察的 IterableDiffers,但似乎无法让它从屏幕上移除离子芯片。
搜索html:
<ion-chip color="primary" *ngFor="let item of advancedSearchesSelected; let i = index">
<ion-icon name="close" color="danger" (click)="removeChipFromSearch(item); advancedSearchesSelected.slice(i, 1)"></ion-icon>
<ion-label> {{item}} </ion-label>
</ion-chip>
搜索.ts
advancedSearchesSelected: Array<string> = [];
constructor( public searchService: SearchService ){}
ngOnInit () {
this.advancedSearchesSelected = this.searchService.getSelectedValues();
}
removeChipFromSearch(chipToClear: string) {
this.searchService.updateSearchInfo('remove', chipToClear);
}
搜索 service.ts
selectedValues: string[] = [];
public updateSearchInfo = (action: string, item: string) => {
console.log('UPDATE SEARCH INFO -->', action, item);
action === 'add' ?
this.selectedValues.push(item) :
this.clearSingleValue(item);
};
private clearSingleValue(item: string) {
this.selectedValues = this.selectedValues.filter(val => val !== item);
};
添加和删除正常,但 DOM 元素仍然存在。
【问题讨论】: