【发布时间】:2018-12-14 18:01:01
【问题描述】:
由于normalizeUri 管道,我从pages 数组中删除了项目后无法刷新模板。没有normalizeUri 管道,相同的代码也可以正常工作。你能告诉我管道实施的问题是什么吗?即如果有管道,为什么模板不更新。
.html
<ion-slides pager (ionSlideDidChange)="slideChanged()">
<ion-slide *ngFor='let page of pages | normalizeUri'>
<img [src]='page' />
</ion-slide>
</ion-slides>
.ts
async removePage() {
try {
await SbSdk.removePage({ page: this.selectedPage });
let pageIndexToRemove = null;
this.pages.forEach((p, index) => {
if (this.selectedPage.pageId === p.pageId) {
pageIndexToRemove = index;
}
});
this.pages.splice(pageIndexToRemove, 1);
this.selectedPage = null;
if (this.pages.length == 0) {//no pages
this.goToScan();
return;
} else {
setTimeout(() => {
this.goToSlide(this.pages.length - 1);
}, 500);
}
this.changeDetector.detectChanges();
}
catch (err) {
console.log(err);
}
}
管道.ts
import { Pipe, PipeTransform } from '@angular/core';
import { ImageHandlingProvider } from '../../providers/image-handling/image-handling';
import { Page } from 'cordova-plugin-scanbot-sdk';
@Pipe({
name: 'normalizeUri',
})
export class NormalizeUriPipe implements PipeTransform {
constructor(private imageHandlingProvider: ImageHandlingProvider) { }
transform(pages: Page[]): string[] {
return pages.map((p) => {
return this.imageHandlingProvider.normalizeImageFileUri(p.documentPreviewImageFileUri || p.originalPreviewImageFileUri);
});
}
}
【问题讨论】:
-
如果没有必要保持相同的引用,那么您可以尝试
this.pages = this.pages.filter(p => this.selectedPage.pageId !== p.pageId)而不是查找索引和拼接。这样您就可以使用纯管道。
标签: javascript angular typescript ionic3