私はデータモデルを持っています (アプリケーション内の単一インスタンスである必要があります)
export class Computer {
model: string;
serial: string;
completed: boolean = false;
}
最善の方法は、注射可能なサービスで返却することだと思います。
@Injectable()
export class DataService {
getComputer(): Observable<Computer> {
let c = new Computer();
c.model = 'Quite Good Computer 455';
c.serial = '344-344-455-555';
c.ompleted = true;
...
}
}
CoreModule に配置する必要があります。
Observable を返すために DataService.getComputer() を実装する方法は? 直前に作成したc ...
編集
このgetComputer()
方法では、ネットワーク遅延をエミュレートする必要があります - タイムアウトを 2 秒に設定します。以前は使用していましたがPromise
、この機能は次のとおりです。
getComputer(): Promise<Computer> {
return new Promise<Computer>(resolve =>
setTimeout(() => resolve(this.createComputer()), 2000) // 2 seconds
);
}
private createComputer(): Computer {
let c = new Computer();
c.model = 'Quite Good Computer 455';
c.serial = '344-344-455-555';
c.ompleted = true;
return c;
}
次のように消費されました。
ngOnInit() {
this.dataService.getComputer().then(
data => this.computer = data
);
}
これを Observables を使用するように変換し、後で inot コア モジュールを配置します。
GünterZöchbauerの回答の後、次のことを試しました
getComputer(): Observable<Computer> {
let res = new BehaviorSubject<Computer>();
return <Observable<Computer>>res.asObservable();
}
しかし、VSClet res ...
はエラー メッセージのある行を強調表示します[ts] Supplied parameters do not match any signature of call target. (alias) new BehaviorSubject<T>(_value: T): BehaviorSubject<T>
。から輸入BehaviorSubject
しましrxjs/rx
た。
編集
Günter Zöchbauer からの別のメモの後、サービス クラス コードを変更しました
export class DataServiceMock {
private computerObs: Observable<Computer>;
constructor() {
let s = new BehaviorSubject<Computer>();
this.computerObs = s.asObservable();
}
getComputer(): Observable<Computer> {
return this.computerObs;
}
言及されたエラーはここにあります: let s = new BehaviorSubject<Computer>();
. このシナリオでは、2 秒の遅延でComputer
(を使用して) インスタンスをストリームに追加する方法もわかりません。next()
ngInit