2012-12-03 55 views
19

ngOption我想添加一個HTML選擇與選擇上午,下午與angularjs, 我需要的是具有鍵和選項的值相同:Angularjs與陣列

<option value="AM">AM</option> 
<option value="PM">PM</option> 

我的HTML如下這樣

<select ng-model="ampm" ng-options="k as v for (k , v) in ampms"></select> 

和我的控制器看起來像

$scope.ampm = (new Date().getHours()) >= 12 ? 'PM' : 'AM'; 
    $scope.ampms ={"AM":"AM","PM":"PM"}; 

和每一件事工作很好。

我的問題是,爲什麼我不能有同樣的事情時,我用了一個數組(我試過在NG選項所有選項) 因爲這

$scope.ampms =["AM","PM"]; 

什麼都這樣,我總是得到這個

<option value="0">AM</option> 
<option value="1">PM</option> 

我想要的是使用類似上面的數組與選項具有相同的鍵和值。

回答

10

這是在角NG-選項的默認行爲。如果您未指定密鑰名稱,則angular會自動選擇使用索引而不是密鑰。代碼可以在line 405 in /src/ng/directives/select.js on Angular's Github repository上看到。

它甚至不能被「值作爲(值,索引,值)值的值」。

但是,由於dnc253只是打了我一拳(他在我打字的時候出現了)......你不用擔心,Angular會自動爲你做這一切。

26

使用AngularJS,您無需擔心選項的價值。我所看到的所有選項都通過ng-options值爲0。如果你只是尋找具有兩個選項的下拉列表中,也可以是簡單的

<select ng-model="ampm" ng-options="currOption for currOption in ['AM', 'PM']"></select> 

http://jsfiddle.net/EyBVN/1/

+0

我想你列出的鏈接,還有一樣值0,1不AM,PM – ibmkhd

+0

現在你已經接受了答案,你明白我們'在答案中說?值屬性設置爲什麼並不重要。 Angular會根據選定的選項正確地更新您的模型。 – dnc253

+4

如果表單(服務器)的目標需要字符串值而不是索引,那麼這很重要。 –

2

我確實找到了一種方法來將特定數據放置在select的選項值中。你必須到NG-repeat屬性添加到選項標籤選擇標籤中:

<select id="{{question.id}}" name="{{question.id}}" 
    class="{{question.inputclass}}" ng-required="question.required" 
    title="{{question.title}}"> 
    <option value=""></option> 
    <optgroup ng-repeat="group in question.data" label="{{group.group}}"> 
    <option ng-repeat="item in group.data" value="{{item.value}}" 
     ng-selected="{{item.value == question.defaultValue}}"> 
      {{item.description}} 
    </option> 
    </optgroup> 
</select> 

作爲獎勵,我留在原地選項組標籤,以作爲大家一個例子。

question.dataJSON是:

[ 
    {"group":"Canada","data":[{"value":"Ontario","description":"Toronto"}, 
          {"value":"Quebec","description":"Quebec City"}, 
          {"value":"Manitoba","description":"Winnipeg"} 
          ] 
    }, 
    {"group":"Mexico","data":[{"value":"Jalisco","description":"Guadalajara"}, 
          {"value":"Nayarit","description":"Tepic"} 
          ] 
    }, 
    {"group":"United States of America","data":[ 
          {"value":"Alabama","description":"Montgomery"}, 
          {"value":"Georgia","description":"Atlanta"}, 
          {"value":"Mississippi","description":"Jackson"}, 
          {"value":"Louisiana","description":"Baton Rouge"}, 
          {"value":"Texas","description":"Ausint"} 
          ] 
    } 
] 
+1

謝謝!我仍然無法解釋爲什麼ng-options不適合我,但是由於您的文章,我使用ng-repeat構建了選項列表,並且它運行良好! – Edward