私はngForでtrackByを有効にしました。私はそれが呼び出され、動作していることを確認しましたが、DOMがブラウザで再描画されて行がちらつくことがわかりました。ここで何が起きてるの? Angular1では、item.idでトラックを使用しているときにDOMが更新/置換されず、ちらつきが発生しないというブラウザ/クロムデバッガでは、なぜangle2ではそうでないのがわかります。私のコードに何らかのエラーがありますか、何か良いことを実際にやっていることに気付いていないようなものがありますか?trackBy stil re-rendering DOM?
<tr *ngFor="let item of items| async; trackBy:itemTrackBy">
itemTrackBy(index: number, item: MyItem) {
return item.id;
}
EDIT 私はこれを引き起こして、私のAPIサービスで観測可能であることを、エラーを追跡し、それでも、なぜ知りません。
this.items= this.apiService.getItems(searchText).share();
getItems(search?: string): Observable<Item[]> {
let searchParams = new URLSearchParams();
if (search) {
searchParams.set('searchText', search);
}
return this.http
.get(API_BASE_URL + '/items', {search: searchParams})
.map(response => response.json())
.catch(this.handleError);
}
ソリューションは
私は新しいデータをリロードするたびに同じ観測可能this.itemsを使用して代わりに新しいものに置き換えることで解決しました。
this.items = Observable.concat(Observable.of(''), this.searchInput.valueChanges)
.debounceTime(200)
.map((value:string) => value.trim())
.distinctUntilChanged()
.switchMap(search => this.apiService.getItems(searchText);
コード全体を送信してください。 – Bazinga