在Angular中使用自动完成时,一些开发人员可能遇到过它不能与从API中获取的动态数据一起正常工作的问题。这种问题通常是由于数据还没有加载完全而导致的。解决该问题的方法是使用RxJS Observable来确保数据已经加载完全,然后将其传递给自动完成组件。
下面是一个示例,说明如何使用Observable和Angular自动完成来处理从API中获取的动态数据:
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-autocomplete',
templateUrl: './autocomplete.component.html',
styleUrls: ['./autocomplete.component.css']
})
export class AutocompleteComponent {
myControl: FormControl = new FormControl();
filteredOptions: Observable;
constructor(private http: HttpClient) {}
ngOnInit() {
this.filteredOptions = this.myControl.valueChanges
.startWith(null)
.debounceTime(200)
.distinctUntilChanged()
.switchMap(term => this.getOptions(term))
}
private getOptions(term: string) {
return this.http
.get(`https://jsonplaceholder.typicode.com/users?q=${term}`)
.map(res => res.json())
.map(users => users.map(user => user.name))
}
}
在此示例中,我们使用Angular自动完成组件为文本输入框提供了user的选项列表。我们还使用了RxJS Observable来确保所有选项都已加载完全。在这种情况下,我们从https://jsonplaceholder.typicode.com/users API中获取用户信息。我们使用FormControl和valueChanges属性来监视文本输入框的值,并在文本输入框中键入事件时调用getOptions方法来获取选项列表,然后将选项传递给Angular自动完成组件