Basit dizi başlangıcı ile ng seçenekleri


187

Angular ve ile biraz kafam karıştı ng-options.

Basit bir dizi var ve onunla bir seçim başlatmak istiyorum. Ancak, bu seçenekleri value = label istiyorum.

script.js

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

html

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

Ne alırım:

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

İstediğim:

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

Bu yüzden denedim:

<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>

(Ama işe yaramadı.)

Düzenle:

Formum harici olarak gönderildi, bu yüzden 0 yerine değer olarak 'var1'e ihtiyacım var.

Yanıtlar:


304

Üçüncü denemenizde bunu gerçekten doğru yaptınız.

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

Burada çalışan bir örneğe bakın: http://plnkr.co/edit/xEERH2zDQ5mPXt9qCl6k?p=preview

Hile, AngularJS'nin anahtarları 0'dan n'ye kadar sayı olarak yazması ve modeli güncellerken geri çevirmesidir.

Sonuç olarak, HTML yanlış görünecek, ancak bir değer seçerken model yine de doğru şekilde ayarlanacaktır. (yani AngularJS, '0'ı' var1'e çevirecektir)

Epokk'un çözümü de işe yarıyor, ancak verileri eşzamansız olarak yüklüyorsanız, her zaman doğru şekilde güncellenmediğini görebilirsiniz. Kapsam değiştiğinde ngOptions kullanımı doğru şekilde yenilenir.


1
Konu dışısınız. Talimatları anlamadın. O istiyor valueonun içinde select.
EpokK

10
Talimatları anladım, ancak amacı `` değeri '' modele bağlamak ve AngularJ'lerin etiketi oluşturma şekli nedeniyle olanları yanlış anlamak.
James Davies

3
Seçimin değerini açısal olarak alırsanız çalışır, ancak benim durumumda (yani klasik gönderme formu), değerler var1, var2, var3 değil, 0,1,2,3 olacak
Dragu

1
Modele bağlandığınızı varsaydım, ancak açısal olarak dışarıdan gönderilen bir form oluşturmak için AngularJS kullanıyorsanız, EpokK çözümünü kullanın.
James Davies

66
Sadece ben miyim, yoksa bu şimdiye kadarki en kıkırdayan ve belirsiz sözdizimi mi?
fool4jesus

35

Sen kullanabilirsiniz ng-repeatile optionböyle:

<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>

Gönderdiğinizde formgirdinin değerini gizleyebilirsiniz.


DEMO

ng-seçilmiş ng-tekrar


Cevabımı reddettiyseniz, yeni çözümümü kontrol edin.
EpokK

21

gibi bir şey kullanabilirsin

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

ng-seçili olarak, seçimimin önceden yapılması durumunda seçeneği önceden seçersiniz.

Ng-seçenekleri yalnızca dizilerle çalıştığından, bu yöntemi yine ng-seçenekleri yerine tercih ederim. ng-repeat, json benzeri nesnelerle de çalışır.


1
ng-optionsnesne veri kaynakları ile de çalışır. Bkz. Docs.angularjs.org/api/ng/directive/select
Charlie Schliesser

1
Diğerleri geçici çözümler sağlamasına rağmen, bu çözüm en zarif ve eski html stiline yakındır, hem açısal model bağlama hem de form submital ile çalışır. Teşekkürler!
Fadi Chamieh

4
ng-seçilmiş bir açısal direktif olduğu için gidonlara ihtiyaç duymaz. Mükemmel çözüm.
Kasey Speakman

20

Seçiminizi aşağıdaki gibi ayarlarsanız:

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

Alacaksın:

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

çalışan keman: http://jsfiddle.net/x8kCZ/15/


1
Bu çözüm, bir dizgideki ilk değeri seçmek için benim için çalışan tek çözümdü.
Ena

evet bu cevap olmalı, pist benim için sihir yapıyor.
Gurnard

yukarıdaki çözümleri takip ettikten sonra en azından bekliyordum ama bu kolay bir yol oldu
sac Dahal

10
<select ng-model="option" ng-options="o for o in options">

$ scope.option değişiklikten sonra 'var1' değerine eşit olacak, hatta oluşturulan html'de value = "0" ifadesini göreceksiniz

plunker

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.