我正在编写一个Angular 2图书搜索应用程序,该应用程序通过服务与API交互。我有一个供用户将书上传到后端的数据库的表单,提交运行uploadBook
后会运行:
uploadBook(){
//collects form data and uses it to set the value of this.book
this._uploadService.uploadBookToDb(this.book)
.subscribe( res => {
alert('book uploaded');
})
}
在upload.service.ts
中:
uploadBookToDb(book){
return this._http.post(environment.apiUrl + '/book_new', JSON.stringify(book))
.map(res => res.json());
}
这可以正常工作,并且我可以像通常一样从服务器得到响应。但是,当我尝试按用户类型查找书籍时遇到麻烦:
bookTitle.valueChanges
.debounceTime(1000)
.map(bookTitle => this._uploadService.bookLookUp(bookTitle))
.subscribe(res => update dropdown with results);
服务bookLookup
中的服务类似于上面的工作uploadBookToDb
:
bookLookUp(title){
return this._http.post(environment.apiUrl + '/book_lookup', JSON.stringify(title))
.map(res => res.json());
}
但是,当我在书名字段中键入内容时,将返回可观察的内容:Observable {_isScalar: false, source: Observable, operator: MapOperator}
。服务器上没有记录任何活动,即服务中的API调用甚至根本没有执行。
我确定我将可观察对象错误地映射到服务,但是对于像valueChanges
那样处理异步数据请求时如何正确执行此操作感到困惑。任何帮助弄清楚这一点的帮助都将受到欢迎。
答案 0 :(得分:1)
您应该订阅bookLookUp(title)
..在某处返回的可观察对象。
不确定确切的版本,但是如果您使用的是5+版本,请使用HttpClient
而不是完整的Http
并删除.map(res => res.json());
-不再需要。