สิ่งหนึ่งที่ควรทราบคือจำเป็นต้องใช้ ngModel เพื่อให้ ngOptions ทำงาน ... โปรดสังเกตสิ่งng-model="blah"
ที่กำลังพูดว่า "set $ scope.blah เป็นค่าที่เลือก"
ลองสิ่งนี้:
<select ng-model="blah" ng-options="item.ID as item.Title for item in items"></select>
นี่คือเพิ่มเติมจากเอกสารของ AngularJS (ถ้าคุณยังไม่เห็น):
สำหรับแหล่งข้อมูลอาเรย์:
- ป้ายชื่อสำหรับค่าในอาร์เรย์
- เลือกเป็นป้ายกำกับสำหรับค่าในอาร์เรย์
- กลุ่มป้ายกำกับตามกลุ่มสำหรับค่าในอาร์เรย์ = เลือกเป็นกลุ่มป้ายกำกับตามกลุ่มสำหรับค่าในอาร์เรย์
สำหรับแหล่งข้อมูลวัตถุ:
- ป้ายกำกับสำหรับ (คีย์ค่า) ในวัตถุ
- เลือกเป็นป้ายกำกับสำหรับ (คีย์ค่า) ในวัตถุ
- กลุ่มป้ายกำกับตามกลุ่มสำหรับ (คีย์ค่า) ในวัตถุ
- เลือกเป็นกลุ่มป้ายกำกับตามกลุ่มสำหรับ (คีย์ค่า) ในวัตถุ
สำหรับการชี้แจงบางอย่างเกี่ยวกับค่าแท็กตัวเลือกใน AngularJS:
เมื่อคุณใช้ng-options
, ค่าของแท็กตัวเลือกที่เขียนออกมาโดย ng ตัวเลือกจะเป็นดัชนีของรายการอาร์เรย์แท็กตัวเลือกที่เกี่ยวข้องกับ นี่เป็นเพราะ AngularJS ช่วยให้คุณสามารถเลือกวัตถุทั้งหมดด้วยตัวควบคุมแบบเลือกไม่ใช่เฉพาะชนิดดั้งเดิม ตัวอย่างเช่น:
app.controller('MainCtrl', function($scope) {
$scope.items = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 3, name: 'blah' }
];
});
<div ng-controller="MainCtrl">
<select ng-model="selectedItem" ng-options="item as item.name for item in items"></select>
<pre>{{selectedItem | json}}</pre>
</div>
ด้านบนจะช่วยให้คุณสามารถเลือกวัตถุทั้งหมดเป็น$scope.selectedItem
โดยตรงประเด็นคือด้วย AngularJS คุณไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งที่อยู่ในแท็กตัวเลือกของคุณ ให้ AngularJS จัดการสิ่งนั้น คุณควรใส่ใจว่ามีอะไรในโมเดลของคุณในขอบเขตของคุณ
นี่คือพลั่วเกอร์ที่แสดงพฤติกรรมด้านบนและแสดง HTML ที่เขียนออกมา
การจัดการกับตัวเลือกเริ่มต้น:
มีบางสิ่งที่ฉันไม่ได้กล่าวถึงข้างต้นเกี่ยวกับตัวเลือกเริ่มต้น
การเลือกตัวเลือกแรกและลบตัวเลือกที่ว่างเปล่า:
คุณสามารถทำได้โดยการเพิ่มวิอย่างง่ายng-init
ที่กำหนดโมเดล (จากng-model
) เป็นองค์ประกอบแรกในรายการที่คุณทำซ้ำng-options
:
<select ng-init="foo = foo || items[0]" ng-model="foo" ng-options="item as item.name for item in items"></select>
หมายเหตุ: สิ่งนี้อาจจะบ้าไปหน่อยถ้าfoo
มีการเริ่มต้นอย่างถูกต้องกับบางสิ่งที่ "ผิดพลาด" ในกรณีนี้คุณจะต้องจัดการการเริ่มต้นfoo
ในคอนโทรลเลอร์ของคุณส่วนใหญ่
การกำหนดตัวเลือกเริ่มต้นเอง:
มันแตกต่างกันเล็กน้อย สิ่งที่คุณต้องทำก็คือเพิ่มแท็กตัวเลือกเป็นรายการย่อยที่คุณเลือกพร้อมแอตทริบิวต์ค่าว่างจากนั้นปรับแต่งข้อความภายใน:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="">Nothing selected</option>
</select>
หมายเหตุ: ในกรณีนี้ตัวเลือก "ว่าง" จะยังคงอยู่แม้หลังจากที่คุณเลือกตัวเลือกอื่น นี่ไม่ใช่กรณีของพฤติกรรมเริ่มต้นของตัวเลือกภายใต้ AngularJS
ตัวเลือกเริ่มต้นที่กำหนดเองซึ่งซ่อนหลังจากทำการเลือก:
หากคุณต้องการให้ตัวเลือกเริ่มต้นที่กำหนดเองของคุณหายไปหลังจากเลือกค่าคุณสามารถเพิ่มแอตทริบิวต์ ng-hide ให้กับตัวเลือกเริ่มต้นของคุณ:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="" ng-if="foo">Select something to remove me.</option>
</select>