2013-06-29 40 views
0

我有這樣創造了一個選擇列表:如何更改用ng-options綁定的選擇列表的當前值?

<div class="actionList" ng-repeat="selectedAction in outputDevice.selectedActions"> 
     <select class="outputAction" ng-model="selectedAction.value" ng-options="action as action.name for action in outputDevice.userDevice.baseDevice.outputs"> 
     <option value=""> 
      Select Action 
     </option> 
     </select> 
    </div> 

它包含在創建/編輯頁面中。當頁面處於編輯模式時,我想根據從服務器檢索到的某些值選擇列表中的哪個項目。目前,選擇列表將填充正確的選項,但我無法使選擇列表以正確的值開始。這裏是我填充頁面上的值代碼:

   for(var i =1; i<result.length; i++){ 
       var appyDevice = result[i]; 
       var userDevice = appyDevice.device; 
       var selectedActions; 

       if(appyDevice.outputs){ 
        selectedActions = appyDevice.outputs; 
        for(var j =0; j<selectedActions.length; j++){ 
         selectedActions[j].value = { 
          name: selectedActions[j].name, 
          id: selectedActions[j].id 
         }; 
        } 
        $ctrlScope.outputDevices.push({ 
         userDevice: userDevice, 
         selectedActions: selectedActions 
        }); 
       } 
      } 
      $ctrlScope.$apply(); 

我設置selectedActions[j].value,其選擇列表結合了,但是它不會更新。任何想法爲什麼這不起作用?或者其他方式來做到這一點?

編輯: 這裏是結果JSON的樣品(忽略冗餘信息和材料,我們正在序列化工作仍然):

[ 
    { 
     "user":{ 
     "id":1, 
     "username":"asdf", 
     "email":"asdf" 
     }, 
     "id":1, 
     "name":"SuperAppy", 
     "description":"some super duper descriptioon " 
    }, 
    { 
     "appy":{ 
     "user":{ 
      "id":1, 
      "username":"asdf", 
      "email":"asdf" 
     }, 
     "id":1, 
     "name":"SuperAppy", 
     "description":"some super duper descriptioon " 
     }, 
     "inputs":[ 
     { 
      "id":1, 
      "name":"Shake" 
     } 
     ], 
     "outputs":[ 
     { 
      "id":1, 
      "name":"TurnOn" 
     } 
     ], 
     "device":{ 
     "user":{ 
      "id":1, 
      "username":"asdf", 
      "email":"[email protected]" 
     }, 
     "baseDevice":{ 
      "inputs":[ 
       { 
        "id":1, 
        "name":"Shake" 
       }, 
       { 
        "id":2, 
        "name":"Slide" 
       } 
      ], 
      "outputs":[ 
       { 
        "id":1, 
        "name":"TurnOn" 
       }, 
       { 
        "id":2, 
        "name":"TurnOf" 
       } 
      ], 
      "id":1, 
      "name":"iPhone5", 
      "osVersion":5.0, 
      "appVersion":0.0 
     }, 
     "id":1 
     }, 
     "id":1 
    }, 
    { 
     "appy":{ 
     "user":{ 
      "id":1, 
      "username":"asdf", 
      "email":"[email protected]" 
     }, 
     "id":1, 
     "name":"SuperAppy", 
     "description":"some super duper descriptioon " 
     }, 
     "inputs":[ 
     { 
      "id":1, 
      "name":"Shake" 
     }, 
     { 
      "id":2, 
      "name":"Slide" 
     } 
     ], 
     "outputs":[ 
     { 
      "id":2, 
      "name":"TurnOf" 
     } 
     ], 
     "device":{ 
     "user":{ 
      "id":1, 
      "username":"asdf", 
      "email":"[email protected]" 
     }, 
     "baseDevice":{ 
      "inputs":[ 
       { 
        "id":1, 
        "name":"Shake" 
       }, 
       { 
        "id":2, 
        "name":"Slide" 
       } 
      ], 
      "outputs":[ 
       { 
        "id":1, 
        "name":"TurnOn" 
       }, 
       { 
        "id":2, 
        "name":"TurnOf" 
       } 
      ], 
      "id":3, 
      "name":"GalaxyS3", 
      "osVersion":5.0, 
      "appVersion":0.0 
     }, 
     "id":3 
     }, 
     "id":2 
    } 
] 

編輯2: 按在評論中鏈接的可能重複,我嘗試一個ng-init添加無濟於事:

<select class="inputAction" ng-model="selectedAction.value" ng-options="action as action.name for action in inputDevice.userDevice.baseDevice.inputs" ng-init="selectedAction.value=selectedAction.name"> 

第I油墨,這是無關緊要的,反正,因爲我切實做好這個初始化在我的下面幾行代碼:

     selectedActions[j].value = { 
          name: selectedActions[j].name, 
          id: selectedActions[j].id 
         }; 
+0

你試過[ng-selected](http://docs.angularjs.org/api/ng.directive:ngSelected)嗎? – mb21

+0

這似乎是因爲我的選擇選項是由角度生成的,我將不得不在事後修改DOM來添加,這似乎與角度設計原則相反。 – GBleaney

+0

你不需要'

回答

1

我修改MB21的小提琴讓你的代碼工作,並演示初始化值。

http://jsfiddle.net/GCrU3/

的問題是,當你對選項的選擇和NG-選項使用NG-模型,你必須在NG-模型變量設置爲正在使用的對象的確切參考生成該選項:

for(var j =0; j<selectedActions.length; j++){ 
     selectedActions[j].value = userDevice.baseDevice.outputs[0]; // change index to select different initial value 
    } 
+0

另外,考慮不要將不同類型的對象干擾到同一個數組中(json的頂層)。如何返回一個用戶屬性和設備屬性(或任何他們應該是)的對象? –

+0

同意。正如我在文章中提到的那樣,序列化現在已經足夠威嚴了,當我試圖清理它時,我會記住這一點。 – GBleaney

相關問題