Javascript Angular 2-API请求未返回Observable,错误:undefined没有属性';长度';

Javascript Angular 2-API请求未返回Observable,错误:undefined没有属性';长度';,javascript,angular,typescript,Javascript,Angular,Typescript,异常:未捕获(承诺中):错误:中的错误原因:无法读取未定义的属性“length” TypeError:无法读取未定义的属性“length” 因此,交易是,POST方法似乎工作得很好。do()记录来自服务器的正确预期响应,但在SearchService中的getSearchResults()实现和SearchResultsComponent中的函数调用之间的某个地方出现了故障_搜索结果永远不会更新为任何值 search.service.ts getSearchResults(numberO

异常:未捕获(承诺中):错误:中的错误原因:无法读取未定义的属性“length” TypeError:无法读取未定义的属性“length”

因此,交易是,POST方法似乎工作得很好。do()记录来自服务器的正确预期响应,但在SearchService中的getSearchResults()实现和SearchResultsComponent中的函数调用之间的某个地方出现了故障_搜索结果永远不会更新为任何值

search.service.ts

    getSearchResults(numberOfResults: number, offset: number, sortProperties?: ISort): Observable<ISearchResult[]>{
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });
    let searchParams = localStorage.getItem("savedSearchParameters");

    return this._http.post(this._baseUrl + "customer", searchParams, options)
        .do(r => console.log(r))
        .map((r: Response) => r.json().data as ISearchResult[]);

}
private _searchResults: ISearchResult[];

        this._searchService.getSearchResults(this.numResultsToFetch(), this._resultOffset)
        .subscribe((data: ISearchResult[]) => this._searchResults = data);
搜索结果.template.html

                <results-table
                    *ngIf="_searchResults.length > 0"
                    (sortEvent)="onSort($event)"
                    [resultsPerPage]="_resultSettings.resultsPerPage"
                    [pageNumber]="_pageNumber"
                    [resultOffset]="_resultOffset"
                    [columnMapping]="_columnMapping"
                    [totalPages]="_totalPages"
                    [columnsToBeDisplayed]="_resultSettings.columnsToBeDisplayed"
                    [displayData]="_searchResults"></results-table>

您需要设置
私有搜索结果:ISearchResult[]
设置为空数组,因为它在开始时未定义,因为您的请求是异步的,所以组件无法对尚未定义的内容调用.length


应该是:
private\u searchResults:ISearchResult[]=[]
您需要设置
private\u searchResults:ISearchResult[]
设置为空数组,因为它在开始时未定义,因为您的请求是异步的,所以组件无法对尚未定义的内容调用.length


应该是:
private\u searchResults:ISearchResult[]=[]

在这种情况下,我将使用公共getter作为
private\u searchResults:ISearchSersult[]。但是您不需要为它设置值。但是我很确定模板不能访问私有变量,因为它永远不会到达
$scope
。 比如说:

public get searchResults():ISearchResult[]{
    return this._searchResults;
}
然后修改模板:

<results-table
   *ngIf="searchResults.length > 0"

在本例中,我将对
私有搜索结果使用公共getter:ISearchSersult[]。但是您不需要为它设置值。但是我很确定模板不能访问私有变量,因为它永远不会到达
$scope
。 比如说:

public get searchResults():ISearchResult[]{
    return this._searchResults;
}
然后修改模板:

<results-table
   *ngIf="searchResults.length > 0"

这可以工作,或者在模板中执行
ngIf=“searchResults
而不是
ngIf=“searchResults.length>0
。这可以工作,或者在模板中执行
ngIf=“searchResults
而不是
ngIf=“searchResults.length>0
*ngIf=“\u searchResults?.length>0”