[英]Angular 2 - API Request not returning Observable, Error: undefined has no property 'length'
例外:未捕获(承诺):错误: http:// localhost:3000 / app / search / results / templates / search-results.component.html:88:58中的错误,原因是:无法读取未定义的属性“ length” TypeError:无法读取未定义的属性“ length”
因此,交易是POST方法似乎很好。 do()记录了来自服务器的正确预期响应,但是在SearchService中的getSearchResults()实现与SearchResultsComponent中的函数调用之间的某个位置出现了故障。 _searchResults永远不会更新为任何值。
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[]);
}
search-results.component.ts
private _searchResults: ISearchResult[];
this._searchService.getSearchResults(this.numResultsToFetch(), this._resultOffset)
.subscribe((data: ISearchResult[]) => this._searchResults = data);
search-results.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>
您需要设置private _searchResults: ISearchResult[];
为空数组,因为在开始时它是未定义的,因为您的请求是异步的,因此该组件无法在尚未定义的内容上调用.length。
应为: private _searchResults: ISearchResult[] = []
在这种情况下,我将对private _searchResults: ISearchSersult[];
使用公共private _searchResults: ISearchSersult[];
。 但是您不需要为其设置值。 但是我很确定模板不能访问私有变量,因为它永远不会到达$scope
。 所以像这样:
public get searchResults():ISearchResult[]{
return this._searchResults;
}
然后修改模板:
<results-table
*ngIf="searchResults.length > 0"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.