Я попытался реализовать автозаполнение матов (Angular Material), и код .TS работает и возвращает данные из моего внутреннего интерфейса API.
НО автозаполнение не показывает объект автоматически в выпадающем списке.
Следуйте за моим кодом:
export class VendaComponent implements OnInit {
public produtoAutoComplete: Observable<Produtos> = null;
public vendaForm = new FormControl();
vendas: Venda[] = [];
produtos:Produtos;
isLoading = false;
constructor(private vendasService: VendaService, private produtoService: ProdutoService, private toastr: ToastrService) { }
lookup(value: string): Observable<Produtos> {
return this.produtoService.search(value.toLowerCase()).pipe(
// map the item property of the github results as our return object
map(results => results.produtos),
// catch errors
catchError(_ => {
return of(null);
})
);
}
ngOnInit() {
this.produtoAutoComplete = this.vendaForm.valueChanges.pipe(
startWith(''),
// delay emits
debounceTime(300),
//map(options => options ? this.filter(options) : this.produtos.slice())
switchMap(value => {
if (value !== '') {
// lookup from github
return this.lookup(value);
} else {
// if no value is pressent, return null
return of(null);
}
})
);
}
Сервисный код:
const API_URL = environment.apiUrl;
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'text' as 'json'
};
@Injectable({
providedIn: 'root'
})
export class ProdutoService {
private produtoUrl = API_URL + 'produto/'; // URL to web api
dataChange: BehaviorSubject<Produto[]> = new BehaviorSubject<Produto[]>([]);
// Temporarily stores data from dialogs
dialogData: any;
produtos: Produto[] = [];
constructor(private httpClient: HttpClient) { }
И мой HTML:
<form class="example-form">
<mat-form-field floatLabel="never">
<input matInput type="text" aria-label="Number" matInput [formControl]="vendaForm" [matAutocomplete]="auto">
<mat-placeholder class="placeholder">Search</mat-placeholder>
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let option of produtoAutoComplete | async" [value]="option.descProduto">
{{option.descProduto}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
Я все перепробовал, следую тысячам примеров и ничего не работает. Как я уже сказал, служба работает и возвращает мой JSON, моя проблема, когда я пытаюсь отобразить результат.