我试着用角大学提供的很好的例子实现一个角数据表。但我被困在实现我的数据源上。这是我的资料来源:
import { Aircraft } from '../shared/aircraft';
import { AircraftInfoService } from './aircraft-info.service';
import { BehaviorSubject } from 'rxjs';
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/catchError';
import 'rxjs/add/operator/finalize';
export class allAircraftInfoDataSource implements DataSource<Aircraft> {
private aircraftDBSubject = new BehaviorSubject<Aircraft[]>([]);
private loadingSubject = new BehaviorSubject<boolean>(false);
public loading$ = this.loadingSubject.asObservable();
constructor(private aircraftInfoService: AircraftInfoService) {}
connect(collectionViewer: CollectionViewer): Observable<Aircraft[]> {
return this.aircraftDBSubject.asObservable();
}
disconnect(collectionViewer: CollectionViewer): void {
this.aircraftDBSubject.complete();
this.loadingSubject.complete();
}
getAircraft() {
this.loadingSubject.next(true);
this.aircraftInfoService.getAircraft().pipe(
catchError(() => **of**([])),
finalize(() => this.loadingSubject.next(false))
)
.subscribe(data => this.aircraftDBSubject.next(data));
}
}
我是在“追赶错误”、“of”、“finalize”上出现错误,而第二次使用“data”则会产生错误。以下是我的编译错误:
ERROR in ../../src/app/services/aircraft-info-datasource.service.ts(31,9): error TS2552: Cannot find name 'catchError'. Did you mean 'RTCError'?
../../src/app/services/aircraft-info-datasource.service.ts(31,26): error TS2304: Cannot find name 'of'.
../../src/app/services/aircraft-info-datasource.service.ts(32,9): error TS2304: Cannot find name 'finalize'.
../../src/app/services/aircraft-info-datasource.service.ts(34,52): error TS2345: Argument of type '{}' is not assignable to parameter of type 'Aircraft[]'.
Type '{}' is missing the following properties from type 'Aircraft[]': length, pop, push, concat, and 26 more.
我以为我已经按照这些例子写信了,但我显然遗漏了一些东西。我需要纠正什么?
谢谢.
发布于 2019-03-09 19:15:25
您正在导入运算符的RxJS 5“修补程序样式”,并试图将它们用作RxJS 6“可调用运算符”(在RxJS 5中,catchError
也称为catch
)。
import { of } from 'rxjs';
import { catchError, finalize } from 'rxjs/operators';
关于迁移文档,请参见:
发布于 2019-03-09 18:58:41
您需要从catchError
导入rxjs/operators
符号
import { catchError, finalize } from 'rxjs/operators';
查看here,了解v6+的rxjs带来的新更改的一些细节。
https://stackoverflow.com/questions/55080860
复制相似问题