Angular раскрывающийся список не показывает по умолчанию при загрузке - PullRequest
1 голос
/ 27 февраля 2020

У меня действительно странная проблема с Angular формами.
Так что в основном у меня есть форма, которая включает в себя пользовательский выбор с 3 вариантами.
<div class="form-group"> <label class="form-label" for="custom-select">Type of Map:</label> <select class="custom-select" ngModel #mapType="ngModel" name="mapType" required> <option *ngFor="let m of mapTypes" value="{{m.value}}">{{m.name}}</option> </select> </div>

Теперь, теоретически это должно загрузить данные из этого массива:

mapTypes = [{value:1, name:'Draw All'}, {value:2, name: 'Draw Movements (Display Most Recent)'}, {value:3, name: 'Draw Movements (Display All)'}];

И это успешно происходит. Единственная проблема при загрузке страницы выглядит следующим образом:
dropdownOnLoad

Но, когда я нажимаю на нее, я получаю все параметры (и значения успешно проходят когда форма отправлена)
dropdownWhenClicked

Итак, мой вопрос: почему это происходит и как я могу это исправить? Параметры загружаются правильно, и первый вариант выбран по умолчанию (это то, что я хочу). Тем не менее, он не будет отображаться в поле при загрузке страницы. Это странно, потому что у меня есть еще один выпадающий список, который работает примерно так (на самом деле более обширно) и работает отлично.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Я бы предложил связать ngModel с локальной переменной и инициализировать ее желаемым значением.

[(ngModel)]="selected"

Например:

HTML :

<div class="form-group">
   <label class="form-label" for="custom-select">Type of Map:</label>
       <select class="custom-select" [(ngModel)]="selected" name="mapType" required >
           <option *ngFor="let m of mapTypes" value="{{m.value}}" >{{m.name}}</option>
       </select>
 </div>

Компонент:

  mapTypes = [{value:1, name:'Draw All', selected: true}, {value:2, name: 'Draw Movements (Display Most Recent)'}, {value:3, name: 'Draw Movements (Display All)'}];

  selected = this.mapTypes[0].value;

Работает Stackblitz

Примечание: В целом это хорошая идея / проще использовать материал компоненты с Angular или попробуйте ngx- bootstrap, если предпочитаете bootstrap.

0 голосов
/ 27 февраля 2020

Возможно, проблема в том, что вы не инициализируете значение mapType, поэтому оно ничего не показывает и меняется при нажатии. Поэтому попробуйте установить инициализацию mapType, например, onInit метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...