ดูngOptions
ngOptions (เป็นทางเลือก) - { comprehension_expression=
} - ในรูปแบบใดรูปแบบหนึ่งต่อไปนี้:
สำหรับแหล่งข้อมูลอาร์เรย์ :
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
สำหรับแหล่งข้อมูลวัตถุ:
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
ในกรณีของคุณมันควรจะเป็น
array = [{ "value": 1, "text": "1st" }, { "value": 2, "text": "2nd" }];
<select ng-options="obj.value as obj.text for obj in array"></select>
ปรับปรุง
ด้วยการอัปเดตเกี่ยวกับ AngularJS ตอนนี้มันเป็นไปได้ที่จะตั้งค่าจริงสำหรับvalue
แอตทริบิวต์ของselect
องค์ประกอบที่มีtrack by
การแสดงออก
<select ng-options="obj.text for obj in array track by obj.value">
</select>
วิธีการจำสิ่งที่น่าเกลียดนี้
สำหรับทุกคนที่มีเวลาลำบากในการจำรูปแบบไวยากรณ์นี้: ฉันยอมรับว่านี่ไม่ใช่รูปแบบที่ง่ายที่สุดหรือสวยงามที่สุด ไวยากรณ์นี้เป็นชนิดของความเข้าใจในรายการ 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']
นี่เป็นไวยากรณ์เดียวกันกับที่แสดงไว้ข้างต้น อย่างไรก็ตามใน<select>
เรามักจะต้องแยกความแตกต่างระหว่างค่าจริงในรหัสและข้อความที่แสดง (ฉลาก) ใน<select>
องค์ประกอบ
เช่นเดียวกับเราต้องการperson.id
รหัส แต่เราไม่ต้องการแสดงid
ให้ผู้ใช้เห็น เราต้องการแสดงชื่อ ในทำนองเดียวกันเราไม่สนใจในperson.name
รหัส มีas
คำหลักในการติดฉลากเนื้อหา ดังนั้นจึงเป็นเช่นนี้:
person.id as person.name for person in people
หรือแทนที่จะperson.id
ต้องการperson
อินสแตนซ์ / อ้างอิงเอง ดูด้านล่าง:
person as person.name for person in people
สำหรับวัตถุ JavaScript ก็ใช้วิธีเดียวกันเช่นกัน เพียงจำไว้ว่ารายการในวัตถุจะถูกแยกออก(key, value)
เป็นคู่ ๆ