#angular #typescript #angular7
#angular #typescript #angular7
Вопрос:
У меня есть выпадающий список (регион), который определяет, что должно быть показано в следующем (город)
Region.ts
@Component({
selector: 'app-region-dropdown',
templateUrl: './region-dropdown.component.html',
styleUrls: ['./region-dropdown.component.css'],
providers: [RegionService, CityDropdownComponent]
})
export class RegionDropdownComponent implements OnInit {
regions: Array<Region>;
constructor(private regionsService: RegionService, private cityDropDown: CityDropdownComponent) { }
ngOnInit() {
this.regionsService.getAll().subscribe(data => {
this.regions = data;
});
}
public onChange(value):void {
console.log(value);
this.cityDropDown.loadList(value);
}
}
City.ts
@Component({
selector: 'app-city-dropdown',
templateUrl: './city-dropdown.component.html',
styleUrls: ['./city-dropdown.component.css'],
providers: [RegionService]
})
export class CityDropdownComponent implements OnInit {
cities: Array<City>;
constructor(private regionsService: RegionService) { }
ngOnInit() {
}
public loadList(regionId: number) {
this.regionsService.getCities(regionId).subscribe(data => {
console.log(data);
this.cities = data;
});
}
}
city.html
<mat-form-field>
<mat-select placeholder="City">
<mat-option *ngFor="let city of cities" >
{{city.name}}
</mat-option>
</mat-select>
</mat-form-field>
консоль показывает, что regionsService вернул список, но список городов так и не был обновлен
Комментарии:
1. Вы уверены, что возвращаемые данные относятся к городам, а не к региону?
2. CityDropdownComponent в поставщиках?
3. @GregoryMazur используйте общий сервис для передачи значения в функции onChange(). Используйте общую службу и тему.
4. Попробуйте сначала присвоить переменной cities значение пустого списка: cities: Array<string> = []; (в объявлении) Возможно, не может быть события onChange (), когда нет объекта.
5. Если вы создадите StackBlitz с проблемой, мы можем попытаться исправить это там. В вашем коде нет очевидной ошибки, но я вижу, что есть некоторые обсуждения о динамическом изменении mat-select в gihub, которые могут повлиять на вас.
Ответ №1:
Вероятно, мне нужно просмотреть весь ваш проект, чтобы выяснить, что не так, но я сделал нечто подобное в этом stackblitz:
https://stackblitz.com/edit/angular-7-master-wuuknx
Это работает.
Комментарии:
1. лол, это глупо, но я перенес код в regions-component, и он работает
2. кстати, вот мой пример, просто не знаю, что поставить вместо HttpClient, чтобы он мог работать локально stackblitz.com/edit/angular-ihgbpg
3. Хорошо, вам, вероятно, следует прочитать о взаимодействии с компонентами. У вас был странный DI компонента, который не имел смысла, и вам также необходимо передавать ввод / вывод компонентам, используя директивы ввода и вывода. Взгляните на этот вариант вашего решения: stackblitz.com/edit/angular-whzhuh