サーバーからjSonを取得して、Angular 5アプリのクラスにマッピングしようとしています。以下は、エラーなしで機能するサービス メソッドです。
getSearchResultTable(hash: number): Observable<Model.SearchResult.RootObject> {
return this.http.get<Model.SearchResult.RootObject>('http://somelink/api/SearchResult/123')
.map(res => new Model.SearchResult.RootObject());
return tmp;
}
次のコンポーネント クラス:
export class SearchResultPageComponent implements OnInit {
searchResult: Model.SearchResult.RootObject;
constructor(private searchResultService: SearchResultService, private router: Router) { }
ngOnInit(): void {
this.searchResultService.getSearchResultTable(122).subscribe( data => {
this.searchResult = data;
});
let t = this.searchResult;
}
}
これは複雑なオブジェクトであり、次のModel.SearchResult.RootObject
サービスでjSonによって生成されます。
すべての例でこの方法が説明されています...しかし、私の場合this.searchResult
はundefined
. 私が間違っているのは何ですか?
アップデート
map
また、サービスメソッドを削除して変更しようとしました:
getSearchResultTable(hash: number): Model.SearchResult.RootObject {
this.http.get<Model.SearchResult.RootObject>('http://somelink/api/SearchResult/123')
.subscribe( data => {
this.searchResult = data;
});
return this.searchResult;
}
そして、次のようなコンポーネントメソッド:
ngOnInit(): void {
this.searchResult = this.searchResultService.getSearchResultTable(122);
}
サービスは次の例外を取得します:
- ReferenceError: データが定義されていません
- eval で (SearchResultService.getSearchResultTable での評価 (webpack-internal:///../../../../../src/app/search-module/services/search-result.service.ts)、 :1:1)
- SearchResultService.getSearchResultTable で (webpack-internal:///../../../../../src/app/search-module/services/search-result.service.ts:27:21)
- SearchResultPageComponent.ngOnInit で (webpack-internal:///../../../../../src/app/search-module/pages/search-result/search-result.component.ts:23 :54)
- checkAndUpdateDirectiveInline で (webpack-internal:///../../../core/esm5/core.js:12291:19)
- checkAndUpdateNodeInline で (webpack-internal:///../../../core/esm5/core.js:13794:20)
- checkAndUpdateNode (webpack-internal:///../../../core/esm5/core.js:13737:16) で
- debugCheckAndUpdateNode (webpack-internal:///../../../core/esm5/core.js:14609:76) で
- debugCheckDirectivesFn で (webpack-internal:///../../../core/esm5/core.js:14550:13)
- Object.eval で [updateDirectives として] (ng:///SearchModule/SearchResultPageComponent_Host.ngfactory.js:9:5)
- Object.debugUpdateDirectives で [updateDirectives として] (webpack-internal:///../../../core/esm5/core.js:14535:21)
アップデート
私の場合、次のスニペットは正しいです:
this.http.get<Model.SearchResult.RootObject>('http://someurl/api/SearchResult/123')
.subscribe( (data: Model.SearchResult.RootObject) => {
this.searchResult = data;
});
return this.searchResult;