0

我有一个这样创建的选择列表:

    <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":"asdfm995@gmail.com"
         },
         "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":"asdfm995@gmail.com"
         },
         "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":"asdfm995@gmail.com"
         },
         "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">

无论如何,我认为这无关紧要,因为我在代码的以下几行中有效地进行了此初始化:

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

1 回答 1

1

我已经修改了 mb21 的小提琴以使您的代码正常工作并演示初始化值。

http://jsfiddle.net/GCrU3/

问题是,当您在 select 和 ng-options 上使用 ng-model 选项时,您必须将 ng-model 变量设置为用于生成该选项的对象的确切引用:

    for(var j =0; j<selectedActions.length; j++){
        selectedActions[j].value = userDevice.baseDevice.outputs[0];  // change index to select different initial value
    }
于 2013-06-30T09:44:38.713 回答