#material-design #angular7 #dropdown
#material-design #angular7 #выпадающий
Вопрос:
Я новичок в angular 7 material design и работаю над несколькими выпадающими списками.
Итак, у меня всего 2 выпадающих списка, где для второго требуется идентификатор первого.
Это делается для того, чтобы список элементов во втором выпадающем списке сузился на основе ранее выбранного элемента. Я не уверен, как это сделать, и любая помощь очень ценится.
Обслуживание
getAllMarkets(){
return this.http.get(this.url 'allMarkets')
}
getProducts(id: number){
return this.http.get(this.url 'products')
}
.ts
markets;
products;
ngOnInit() {
this.getMarkets();
this.getFilteredProducts();
}
getMarkets() {
return this.service.getAllMarkets().subscribe(res => {
this.markets = res;
});
}
getFilteredProducts() {
return this.service.getProducts(Not sure how to pass id).subscribe(res => {
this.products = res;
});
}
.html
<mat-form-field>
<mat-select placeholder="Markets" [(ngModel)]="selectedMarket" name="market">
<mat-option *ngFor="let market of markets" [value]="market.id" >
{{market.name}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-select placeholder="Products" [(ngModel)]="selectedProducts" name ="product">
<mat-option *ngFor="let product of products" [value]="product.id"
>
{{product.name}}
</mat-option>
</mat-select>
</mat-form-field>
Комментарии:
1. Привет, Адриан, позволит ли это мне передать идентификатор во второй выпадающий список?
Ответ №1:
Вы привязываете первый список к selectedMarket с помощью ngModel, чтобы
this.service.getProducts(this.selectedMarket)
и установите this.products = [], чтобы очистить список перед вызовом для получения продуктов.
и вызвать его в ngModelChange
<mat-select placeholder="Markets" [(ngModel)]="selectedMarket" name="market" (ngModelChange)="getFilteredProducts()">
Комментарии:
1. Привет, Адриан, к сожалению, у меня это не сработало. Я не могу заполнить второй выпадающий список. Где бы я разместил
this.products=[]
?
Ответ №2:
Я думаю, сначала вам нужно зафиксировать выбранное значение первого mat-select
с помощью (изменить), например:
<mat-select placeholder="Markets" [(ngModel)]="selectedMarket" name="market" (change)="onSelectMakert($event.value)">
Затем вы должны объявить onSelectMakert (событие) в вашем компоненте, чтобы получить выбранное значение первого mat-select
. После того, как вы объявили функцию, давайте загрузим второй select.
onSelectMakert(data) {
this.products = // charge your products base on the "data" (aka. id)
}
Комментарии:
1. Привет, немец! Спасибо за ваш отзыв. как
onSelectMakert(data) { this.products = // charge your products base on the "data" (aka. id) }
это будет выглядеть? Будет ли это выглядеть так =>onSelectMakert(data) { this.products = this.selectedMarket }
? Кажется, я не могу заставить это работать.