#angular #api #events
#angular #API #Мероприятия
Вопрос:
Я хочу изменить выпадающее значение на основе выбранного другого выпадающего списка. это HTML
<select class="form-control" name="category_id" formControlName="category_id" (change)="changeProfession($event.target.value)">
<!-- <option value="" d>Select Category (required)</option> -->
<option *ngFor='let surveyCategory of surveyCategoryList' [ngValue]="surveyCategory._id">{{ surveyCategory.category }}</option>
<app-field-error-display [displayError]="this.validationService.isFieldValid(updateProfileForm,'category_id')">
</app-field-error-display>
</select>
здесь я хочу получить значение в соответствии с выбранной категорией
<div class="form-group label-floating select_lang">
<label class="control-label">Profession</label>
<select class="form-control" name="profession_id" formControlName="profession_id" >
<!-- <option value="" >Select Category (required)</option> -->
<option *ngFor='let profession of ProfessionList' [ngValue]="profession._id">{{ profession.profession }}</option>
<app-field-error-display [displayError]="this.validationService.isFieldValid(updateProfileForm,'profession_id')">
</app-field-error-display>
</select>
</div>
это файл ts
changeProfession(categoryid){
debugger;
this.authService.getProfessionList(categoryid).subscribe(data => {
debugger;
if (data.success) {
debugger;
this.ProfessionList = data.profession;
console.log(data);
setTimeout(() => {
//if (obj.survey_category_id)
//this.updateProfileForm.controls['profession_id'].setValue(obj.profession_id._id);
$('.select_lang').removeClass('is-empty');
}, 10);
}
});
}
и это служебный файл
// Get survey profession list
getProfessionList = function (categoryid) {
debugger;
return this.http.get(this.api_url 'profession/list/' categoryid, this.getAuthHeaderOption()).map(res => res.json());
}
Когда я вызываю это событие, идентификатор категории передается, но значение не отображается.
Пожалуйста, скажите мне, что я здесь делаю не так.
Комментарии:
1. Правильно ли вы получаете «данные» в консоли?
2. Только я получаю идентификатор категории
3. вот так
4: 5ae385afa4723d1858b0c239
4. когда я отлаживаю его, то после вызова
.subscribe
он завершается и не переходит внутрь этогоif (data.success) { debugger; this.ProfessionList = data.profession; console.log(data);
5. если я проверяю postman и делаю вот так
http://IPADDRES:DOMIAN/profession/list/5a745ef7eba43102e6038881
, то это дает мне следующий вывод{"status":200,"success":true,"message":"list","profession":[{"_id":"5c2f65ab1f798017909615af","profession":"ss"}]}
Ответ №1:
Способ реализации вашего требования Angular будет немного отличаться от того, как вы это сделали.
в вашем component.ts
файле добавьте приведенный ниже код, в котором вы должны инициализировать форму :
this.sampleForm.controls['category_id'].valueChanges.subscribe((value) => {
this.authService.getProfessionList(value).subscribe(data => {
this.ProfessionList = data.profession;
});
});
замените sampleForm
на свое formGroup
имя. Также обратите внимание, что значением data.profession
должен быть массив объектов.
Вот пример рабочей ссылки на Stackblitz: Рабочая демонстрация
Комментарии:
1. Так что, нам не нужно создавать событие изменения, как я сделал?
2. Зачем вам писать свой собственный контроллер изменений, когда angular уже предоставил его
3. Большое спасибо, у меня действительно это работает, даже я долгое время зависал, но теперь я избавился от этой проблемы.
4. какой из angular предоставляет контроллер изменений?
5. @Привет, ты там