1
Observablesサービスレイヤの呼び出しに問題があります。サービスレイヤまでデータを取得していますが、何が間違っているかわからないコンポーネントレイヤに伝播しません。私はここで何か間違っていますか? DNSComponent.ts角度:観測可能、コンポーネントクラスにデータを返さないで購読する
result: Dns[];
this.dnsSvc
.getDNS()
.subscribe(
res => {
console.log('In component result class:===>' + res);
this.result = res;
console.log('In component class:===>' + this.result);
},
// make sure you get data here.
// console.log('Data from API layer', +res);
error => console.log('Error from backend API', +error),
() => console.log('Done')
);
で
HelperUtils.tsで(これは、HTTP REST APIの同じクラスである)
getResource(url: string): Observable<any[]> {
this.headers.set('token', token);
this.options = new RequestOptions({ headers: this.headers });
console.log('URL at HttpUtils', this.getServer() + url);
console.log('Options at HttpUtils', this.options);
return this.http
.get(this.getServer() + url, this.options)
.map(this.retrieveData)
.catch(this.handleException);
}
DNSService.tsで
getDNS(): Observable<Dns[]> {
return this.helperUtils
.getResource('databases')
.subscribe(
res => this.data = res,
// make sure you get data here.
// console.log('Data from Service API layer', this.data),
error => console.log('Error from backend API', +error),
() => console.log('Done')
);
}
DNSModel.ts
export class Dns {
public dnsname: string;
}
以下更新されたコード:
model.ts
export class Dns {
public dnsname: string;
}
helperUtils.ts
// - Simply return the observable of the call
getResource(url: string): Observable<Response> {
this.headers.set('Api_key', api_key);
this.options = new RequestOptions({ headers: this.headers });
console.log('URL at HelperUtils', this.getServer() + url);
console.log('Options at HelperUtils', this.options);
return this.http.get(this.getServer() + url, this.options);
}
サービス層
data: Dns[];
// Subscribe to the result and do the Mapping.
getDNS(): Observable<Dns[]> {
return this.httpUtils.getResource('databases')
.map(res => {
if (res.ok) {
let body = this.retrieveData(res);
return body.map(x => new Dns());
}
// console.log('Issue with the response');
}
);
}
private retrieveData(res: Response) {
console.log('Response at httpService -', res.json());
let body = res.json();
console.log('Response at httpService res body-', body);
return body;
}
あなたのgetDNS()
方法でComponent.ts
result: Dns[];
ngOnInit() {
this.instanceDetailsSvc.getDNS()
.map(res => {
this.result = res;
},
error => console.log('Error from backend API', +error)
);
console.log('The Result Is:::::' + this.result);
}
私は上記の解決策を試してみましたが、私はエラーTS2345の問題を取得しています:引数タイプ 'any []'のタイプは、 'レスポンス'タイプのパラメータに割り当てられません。 getDNS():観測可能 { リターンthis.helperUtils.getResource( 'データベース') の.map(RES => {// AngularTSCompiler 場合(res.ok){//ここ マッピング・ロジックを実行する、すなわち リターンres.json.map(x =>新しいDNS(x)); } else { //無効な結果を処理する } } ); } –
Swaroop
正しくマッピングしていますか?この例では、新しいDNS(x)を作成しましたが、独自のマッピングを実装する必要があります。 –
Ormeno、ありがとうありがとうございました。あなたが言及したとおりのやり方で、データをサービス層に渡しています(文字の制限のためコメントにコードを入力できません)。しかし今は別の問題が発生しています。私はサービス層にデータを取得していますが、その時点ではデータは定義されていません。あなたの考えを示唆してください。 – Swaroop