Параметры AngularJS ng, не отображающие значения

Как я могу отобразить значение следующего списка опций?

$scope.limits = [ {value:  '5', text: 'Afficher 5 par page'},
                  {value: '10', text: 'Afficher 10 par page'},
                  {value: '15', text: 'Afficher 15 par page'},
                  {value: '20', text: 'Afficher 20 par page'}
                ];

<select id="limitType" name="limit" ng-model="limit" ng-options="limit.value as limit.text for limit in limits"></select> enregistrement par page

Ожидаемый результат (ожидается в значении = "limit.value":

<select ng-options="option.value as option.text for option in limits" ng-model="limit" id="limitType" class="ng-pristine ng-valid">
    <option value="5" selected="selected">Afficher 5 par page</option>
    <option value="10">Afficher 10 par page</option>
    <option value="15">Afficher 15 par page</option>
    <option value="20">Afficher 20 par page</option>
</select>

Результат:

<select ng-options="option.value as option.text for option in limits" ng-model="limit" id="limitType" class="ng-pristine ng-valid">
    <option value="0" selected="selected">Afficher 5 par page</option>
    <option value="1">Afficher 10 par page</option>
    <option value="2">Afficher 15 par page</option>
    <option value="3">Afficher 20 par page</option>
</select>

Ответ 1

Директива ng-options не устанавливает атрибут value в элементах <options>. Он всегда использует последовательность.

Использование limit.value as limit.text for limit in limits означает:

  • Установите метку <option> как limit.text
  • Сохраните значение limit.value в списке ng-model

Проверьте эту скрипту: http://jsfiddle.net/bmleite/k58Hw/

Ответ 2

Чтобы он работал, вы (мы) должны изменить способ отправки данных на сервер.

Браузер "глупый", и он не заботится об AngularJS, jQuery или какой-либо другой инфраструктуре JavaScript, делающей магию в коде. Если опция содержит значение индекса вместо реального значения, браузер отправит значение индекса на сервер.

Если вы хотите, чтобы это сработало, вам нужно либо использовать ng-repeat в сочетании с тегом параметра, чтобы отобразить правильные значения, либо отправить данные, вызвав метод .post из контроллера AngularJS.

Вот почему я люблю и ненавижу AngularJS.

Ответ 3

Я понимаю, что это старый вопрос, но у меня тоже была проблема с этим. Моим простым решением было создать скрытый ввод и связать его с помощью ngModel с помощью select. Затем, когда вы делаете обычную форму, отправьте скрытый ввод. Надеюсь, это поможет.

Ответ 4

для альтернативного подхода, мы можем использовать ng-repeat

<select  ng-model="limit" id="limitType" class="ng-pristine ng-valid" >
 <option ng-repeat="option in limits " value="{{option.value}}" >
  {{option.text}}
 </option>
</select>