ng-параметри з простим масивом init


187

Я трохи плутаю з Angular і ng-options.

У мене простий масив, і я хочу запустити на нього вибір. Але я хочу, щоб параметри value = label.

script.js

$scope.options = ['var1', 'var2', 'var3'];

html

<select ng-model="myselect" ng-options="o for o in options"></select>

Що я отримую:

<option value="0">var1</option>
<option value="1">var2</option>
<option value="2">var3</option>

Що я хочу:

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>

Тому я спробував:

<select ng-model="myselect2" ng-init=0 ng-options="options[k] as v for (k,v) in options"></select>

<select ng-model="myselect3" ng-init=0 ng-options="b as b for b in options"></select>

(Але це не спрацювало.)

Редагувати:

Моя форма подається зовні, тому мені потрібно значення "var1" замість 0.

Відповіді:


304

Ви насправді мали правильний результат у своїй третій спробі.

 <select ng-model="myselect" ng-options="o as o for o in options"></select>

Дивіться робочий приклад тут: http://plnkr.co/edit/xEERH2zDQ5mPXt9qCl6k?p=preview

Хитрість полягає в тому, що AngularJS записує ключі у вигляді цифр від 0 до n і в будь-якому випадку перекладає назад під час оновлення моделі.

Як результат, HTML буде виглядати неправильно, але модель все одно буде встановлена ​​належним чином при виборі значення. (тобто AngularJS переведе "0" назад у "var1")

Рішення від Epokk також працює, проте якщо ви завантажуєте дані асинхронно, ви можете виявити, що вони не завжди оновлюються правильно. Використання ngOptions буде правильно оновлено, коли область зміниться.


1
Ви поза темою. Ви не зрозуміли інструкцій. Він хоче valueв своє select.
EpokK

10
Я зрозумів інструкції, однак цілком ймовірно, що його намір полягає в прив'язці 'значення' до моделі, і нерозуміє те, що відбувається через те, як AngularJs надає тег.
Джеймс Девіс

3
Це працює , якщо ви отримаєте вибрати значення при допомоги кутового, але в моєму випадку (тобто класичний відправити форму), значення будуть 0,1,2,3, які не var1, var2, var3
Dragu

1
Я припускав, що ви прив'язуєтесь до моделі, але якщо ви просто використовуєте AngularJS для надання форми, поданої зовні у кутову, тоді використовуйте рішення EpokK.
Джеймс Девіс

66
Це тільки я, або це синтаксис, який є найсміливішим і незрозумілішим?
crazy4jesus

35

Ви можете використовувати ng-repeatз , optionяк це:

<form>
    <select ng-model="yourSelect" 
        ng-options="option as option for option in ['var1', 'var2', 'var3']"
        ng-init="yourSelect='var1'"></select>
    <input type="hidden" name="yourSelect" value="{{yourSelect}}" />
</form>

Після подачі formзаявки ви можете отримати приховане значення.


DEMO

ng-вибрано ng-повтор


Якщо ви продемонстрували мою відповідь, перевірте моє нове рішення.
EpokK

21

ви могли б використовувати щось подібне

<select ng-model="myselect">
    <option ng-repeat="o in options" ng-selected="{{o==myselect}}" value="{{o}}">
        {{o}}
    </option>
</select>

використовуючи ng-selected, ви попередньо оберіть цю опцію, якщо мій вибір був попередньо заповнений.

Я все одно віддаю перевагу цьому методу над ng-параметрами, оскільки ng-options працюють лише з масивами. ng-repeat також працює з json-подібними об'єктами.


1
ng-optionsтакож працює з об’єктними джерелами даних. Дивіться docs.angularjs.org/api/ng/directive/select
Чарлі Шліссер

1
Хоча інші давали обхідні шляхи, це рішення на сьогоднішній день є найелегантнішим і близьким до старого html-стилю, працює як з кутовою прив'язкою моделі, так і з форму підмітальної форми. Дякую!
Fadi Chamieh

4
ng-selected не потребує рулі, оскільки це кутова директива. Відмінне рішення.
Спікер Кейсі

20

Якщо ви налаштуєте свій вибір, наприклад:

<select ng-model="myselect" ng-options="b for b in options track by b"></select>

ти отримаєш:

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>

робоча скрипка: http://jsfiddle.net/x8kCZ/15/


1
Це рішення було єдиним, яке працювало для мене для вибору початкового значення в масиві рядків.
Ена

так, це має бути відповіддю, трек виконує магію для мене.
Гурнард

я найменше очікував після наступних рішень, але це був найпростіший вихід
мішок Дахал

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.