SORU
27 AĞUSTOS 2012, PAZARTESİ


Nasıl değer özelliği için AngularJS' ng-seçenekler?

Bir sürü insanı rahatsız ediyor (ben de dahil) gibi görünüyor. <select> etiket seçenekleri doldurmak için AngluarJS ng-options yönergesini kullanırken bir seçenek için değeri ayarlamak için nasıl anlamaya olamaz. Bu belgeleri gerçekten belirsiz - en azından benim gibi bir aptal için.

Çok kolay: bir seçenek için metin ayarlayabiliyorum

ng-options="select p.text for p in resultOptions"

resultOptions örneğin:

[
    {
        "value": 1,
        "text": "1st"
    },
    {
        "value": 2,
        "text": "2nd"
    }
]

(Ve muhtemelen) seçenek değerlerini ayarlamak için en basit şey olmalı, ama şimdiye kadar ben anlamıyorum.

CEVAP
27 AĞUSTOS 2012, PAZARTESİ


http://docs.angularjs.org/api/ng.directive:select

ngOptions(isteğe bağlı)– {comprehension_expression=} – bir aşağıdaki form:

dizi veri kaynakları için:
label for value in array
select as label for value in array
label group by group for value in array
select as label group by group for value in array track by trackexpr
veri kaynakları nesne:
label for (key , value) in object
select as label for (key , value) in object
label group by group for (key, value) in object
select as label group by group for (key, value) in object

Senin durumunda olmalıdır

array = [{ "value": 1, "text": "1st" }, { "value": 2, "text": "2nd" }];

<select ng-options="obj.value as obj.text for obj in array"></select>

Güncelleme

Açısal yapılan güncelleme ile, artık mümkün track by ifade *ile 23* element value öznitelik için gerçek değerini belirlemek için.

<select ng-options="obj.text for obj in array track by obj.value">
</select>

Nasıl bu kadar çirkin şeyler hatırlamak için

Sabit zaman bu formu sözdizimi hatırlamak zorunda olan tüm insanlar için bu en kolay ya da en güzel söz dizimini değil. Bu sözdizimi beni sözdizimi çok kolay hatırlamaya yardımcı olan Python'un liste üreteçleri ve bilerek genişletilmiş bir versiyonu sayılır. Bu şöyle bir şey:

Kod Python:

my_list = [x**2 for x in [1, 2, 3, 4, 5]]
> [1, 4, 9, 16, 25]
# let people to be a list of person instances
my_list2 = [person.name for person in people]
> my_list2 = ['Alice', 'Bob']

Bu aslında ilki yukarıdaki gibi aynı sözdizimi vardır. Ancak, <select> biz genellikle kod gerçek değeri ve gösterilen metin (etiket) <select> bir öğe ayırt etmek gerekir. Gibi, person.id kod ama kullanıcı için id göstermek istemiyoruz ihtiyacımız var, adını göstermek istiyoruz. Aynı şekilde, kodu person.name ilgilenmiyoruz. as malzeme etiketi anahtar kelime olur. Böyle olur:

person.id as person.name for person in people

Ya da, person.id yerine person örnek/referans kendisi ihtiyacımız olabilir. Aşağıya bakın:

person as person.name for person in people

JS nesneleri için, aynı yöntemi de, nesnenin öğeleri (key, value) çift ile sökülür olduğunu unutma geçerlidir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Madeon

    Madeon

    31 Ocak 2010
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • videoisunrelated

    videoisunrel

    5 Mart 2009