Angular 2: Как получить выбранное значение из разных вариантов формы?

Я хотел бы использовать <select> в форме, чтобы позволить пользователю обновлять значения между разными <option>. Я использовал технику из руководства здесь: https://angular.io/docs/ts/latest/guide/forms.html. Вот пример, о котором я говорю:

<div class="form-group">
    <label for="type">Type :</label>
    <select class="form-control" [(ngModel)]="order.type" ngControl="type">
        <option *ngFor="#type of types" [value]="type">{{type}}</option>
    </select>
</div>

В моем order-details.component у меня есть updateOrder(), который вызывает updateOrder() из myApp.services.

Моя проблема в том, что когда я пытаюсь отправить данные из формы в конец: все части с <input> в порядке, но не те, у которых <select> (он возвращает исходные значения, а не тот, который выбран).

Кто-нибудь сталкивался с этой или подобной проблемой? Спасибо за вашу помощь!

Ответ 1

Существует способ получить значение из разных параметров. проверьте этот plunker

component.html

 <select class="form-control" #t (change)="callType(t.value)">
      <option *ngFor="#type of types" [value]="type">{{type}}</option>
    </select>

component.ts

this.types = [ 'type1', 'type2', 'type3' ];
   this.order = {
      type: 'type1'          
  };  

  callType(value){
    console.log(value);
    this.order.type=value;
  }

Ответ 2

Решил эту проблему в течение нескольких часов.

Проверено в (неполной) документации, чтобы найти элемент на странице NgSelectOption под названием "ngValue"

Не уверен, что это предполагаемое использование, но, похоже, оно работает нормально.

Поэтому вместо использования

[value]="item"

Использование:

[ngValue]="item"

Просто используйте ngModel для события select и ngModelChange, если вы хотите что-то сделать, когда оно изменится.

Ответ 3

На самом деле я не могу воспроизвести вашу проблему. Я создал plunkr с очень простой формой с input и select. Когда я отправляю форму, у меня есть фактические значения в связанном объекте. См. Этот plunkr: https://plnkr.co/edit/5C3agW7QZfcrdt88QzSh?p=preview.

Не стесняйтесь сказать мне, правильно ли я понял вашу проблему.

Тьерри

Ответ 4

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

<select #quantity>
  <option value="one">1</option>
  <option value="two">2</option>
  <option value="three">3</option>
  <option value="four">4</option>
  <option value="five">5</option>
</select>

Вы можете сделать следующее:

@ViewChild('quantity') quantity: ElementRef;

console.log(this.quantity.nativeElement.value);  // will print value of the currently selected option