0

サーバーから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.searchResultundefined. 私が間違っているのは何ですか?

アップデート

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;
4

2 に答える 2