Как установить значение по умолчанию для PrimeNG p-dropdown
Я использую PrimeNG в моем приложении angular5. У меня проблема с р-выпадающим
Вопрос
У меня есть p-раскрывающийся список для отображения стран. Я правильно связываю опции выбора, там все работает нормально (эти данные поступают из API), но мне нужно установить выбранную по умолчанию опцию для этого p-выпадающего меню как "Индия".
Я установил значение ng-model как Индия, но это не сработало.
мой код dummy.component.html
<div class="form-group col-md-2">
<div>
<label for="inputEmail4"> Select Country</label>
<span style="color:red">*</span>
</div>
<p-dropdown name="country" [options]="countries" [(ngModel)]="applicant.country" placeholder="select country"
(onChange)="getStatebyCountry(applicant.country,$event)" #country="ngModel" required>
</p-dropdown>
<span *ngIf="country.invalid && (country.dirty || country.touched)">
<span [hidden]="!country.hasError('required')" style="color:#ffa500">country is mandatory</span>
</span>
</div>
мой dummy.component.ts
export class dummyComponent implements OnInit {
//variable declaration scope for all controller function
applicant: any = {};
country: string; constructor() {
}
ngOnInit() {
this.applicant.country = 'India';
}
this.countries = [];
// this.countries.push({ label: 'Select Country', value: '' });
//getallcountries
this.UserService.getallcountries().subscribe(result => {
console.log("countries" + result);
this.cnt = result;
for (let i = 0; i <= this.cnt.length; i++) {
if (this.cnt[i].id === 1) {
this.countries.push({ label: this.cnt[i].name, value: this.cnt[i].id });
}
}
});
Ответы
Ответ 1
Попробуйте заменить
this.applicant.country = 'India';
с
this.applicant = {country: 'India'};
редактировать
Отобразите свой p-dropdown
список, как только вы получите данные из вашего API.
<div *ngIf="dataLoaded">
<p-dropdown [options]="countries" [(ngModel)]="applicant.country"></p-dropdown>
</div>
Посмотреть Plunker
Ответ 2
Вы можете установить значение по умолчанию для PrimeNG Dropdown, используя ngModel, как показано на следующем подходе:
component.html:
<p-dropdown [options]="cities" name="selectedCity" [(ngModel)]="selectedCity"></p-dropdown>
component.ts:
selectedCity: string = 1; //Id value of the City to be selected
Если он не исправлен из-за проблем с версией, попробуйте следующее:
this.cities.value = this.selectedCity;
Надеюсь это поможет...
Ответ 3
Я использую это решение, чтобы исправить это
HTML:
<p-dropdown name="country" [options]="countries" [(ngModel)]="country" placeholder="select country" (onChange)="changeCountry()"></p-dropdown>
TS:
public country;
public countries;
ngOnInit() {
this.applicant.country = 'India';
this.getCountry().then(()=>{
this.country = this.applicant.country
})
}
getCountry(){
return new Promise( (resolve,reject) => {
this.UserService.getallcountries().subscribe(result => {
this.cnt.forEach(element => {
this.countries.push({
label: element.name,
value: element.id
});
});
resolve();
}, error =>{
reject();
});
})
}
changeCountry(){
this.country = this.applicant.country;
}
он работает в Primeng 6.1.3
Ответ 4
Моим решением было загрузить страны в контроллер перед настройкой поля формы (ngModel или formControl). Также держите ключ того же типа. Не используйте число для элемента управления формы и строку для списка:
// first get the cities from the server
response.cities.forEach(city => {
this.dropdowns['cities'].push({ value: city.id, label: element.city }); });
// when setting the form
city_id: new FormControl(this.user.city_id)
В приведенном выше коде this.user.city_id и city.id имеют одинаковый номер типа
Ответ 5
Обновление в PrimgNg
При установке значения по умолчанию для выпадающего меню в Primeng нужно быть немного осторожнее.
<p-dropdown name="country" [options]="countries" [(ngModel)]="country" placeholder="select country" (onChange)="changeCountry()"></p-dropdown>
country
должна быть number
не строкой.
Вы можете ввести его, если это строка.
country: Number("1");
Надеюсь, поможет.
Ответ 6
У меня тоже была эта проблема, и после нескольких минут отладки я обнаружил, что некоторые из распространенных причин этой проблемы могут быть:
1) Несоответствие типов - раскрывающийся список может быть привязан к целым числам, а свойство [(ngModel)] может быть строкой.
Например:
<p-dropdown [options]="countries" [(ngModel)]="selectedCountry"></p-dropdown>
Где
countries = [1,2,3]
и
selectedCountry = '1'
2) Uppercase- в нижнем регистре - раскрывающийся список может быть привязан к строке в нижнем регистре, а свойство [(ngModel)] может быть в верхнем регистре или их комбинации.
Например:
countries = ['United States', 'England', 'Bolivia']
и
selectedCountry = 'united states'
В этом случае должно быть точное совпадение, чтобы работать как положено 'United States'
Ответ 7
У меня просто была похожая проблема.
Я решил это с помощью атрибута html "optionLabel". Если мы читаем документацию PrimeNG, она говорит следующее: Имя поля метки опции, когда в качестве опций используются произвольные объекты вместо SelectItems.
Официальная документация
Надеюсь, это поможет