更新: 我的html模板:
<input type="text" (keyup)="onNameKeyUp($event)">
<button (click)="getOneWord()">Get Profile</button>
<span>{{translation}}</span>
ts。组件:
onNameKeyUp(event: any){
this.spelling= event.target.value;
我在这里变得很绝望,所以希望有人能让我摆脱困境! 我设法将获取请求从角度服务发送到快递服务器。服务器以数据响应。 我的问题是我无法在角度组件中显示服务器返回的数据。
这是我的网络服务:
getWord(name: string): Observable<Word> {
return this.http.get<Word>('http://localhost:3000/api/words/' + name);
}
然后,我将此服务注入组件中,称为:
getOneWord(){
this.webService.getWord(this.spelling)
.subscribe(res =>
console.log(res));
但是,要么显示全部数据,要么不显示任何数据。我想要的是,如果用户搜索/输入“ aman”,则只会返回第一个对象。
数据为:
var words=[
{spelling: "aman", category: "noun", translation: "water"},
{spelling: "azzel", category: "verb", translation: "run"},
{spelling: "aberkan", category: "adjective", translation: "black"},
{spelling: "gar", category: "preposition", translation: "between"}];
答案 0 :(得分:1)
起点
A部分
getWord(name: string): Observable<Word> { return this.http.get<Word>('http://localhost:3000/api/words/' + name); }
更新此
getWord(name: string): Observable<Word[]> { return this.http.get<Word[]>('http://localhost:3000/api/words/' + name); }
B部分
如果您仍能得到一个单词数组。
1)声明一个全局变量
theWord;
2)
getOneWord(){ this.webService.getWord(this.spelling) .subscribe((res: Word[]) => { this.theWord = res.find(d => d.spelling === this.spelling )} );
如果您的API已修复
您可能应该再说一遍。
getOneWord(){ this.webService.getWord(this.spelling) .subscribe(res => console.log(res));
答案 1 :(得分:0)
有上百万种方法可以做到这一点,但是我将为您推荐一些最佳实践,然后提供关于为什么应遵循此方法的更多信息,而不是一些自定义方法。
async
管道将自动退订。禁止您使用takeUntil +一个主题+ ngOnDestroy(已见过here)将服务中的可观察对象直接分配给将传递给异步管道的组件属性。这样可以消除所有额外的变量,并且或多或少直接将“可观察管道”从服务中“连接”到模板。
// component-code
// the property we will
public word$: Observable<Array<Word>>;
ngOnInit() {
// the dollar sign after the variable is a convention to denote its an "observable"
this.words$ = this.getWords()
}
private getWord(word: string): Observable<Word | undefined> {
// the service method returns the list of words, or data
return this.wordService.getWord(word)
// we will use the map operator to take the list of words (which you said
// are returned in the "data"?
.pipe(map((dat) => data.find((dataWord) => dataWord.spelling === word);
}
as
和else
语法:
as
语法,但是如果要在对象上调用函数,则可以传递它。否则,您会在组件上创建属性
<!--component template-->
<div *ngIf="word$ | async as word; else showSpinner">
{{word}}
</div>
<!-- this MUST be an ng-template to work with the ngIf-->
<ng-template #showSpinner>
<div class="spinner"> </div>
</ng-template>