将ng选项绑定到JSON对象中的嵌套数组,在ng repeat中

将ng选项绑定到JSON对象中的嵌套数组,在ng repeat中,json,angularjs,angularjs-ng-repeat,ng-repeat,ng-options,Json,Angularjs,Angularjs Ng Repeat,Ng Repeat,Ng Options,这是我的第一个问题,所以请对我温柔一点!我希望你能帮忙 我正在尝试使用ng repeat在HTML视图中定义一个选择框(下拉列表),以便为数组中的每个项目创建一个选择框。我已经成功地做到了这一点,但当我尝试将所需的选项放入每个选项时,我的问题就出现了 我正在使用的数组{ “字段1”:1, “字段2”:“Value01”, “字段3”:“Value02”, “参考字段”:[ { “fieldId”:100, “fieldValue”:“fieldValueA” }, { “fieldId”:101

这是我的第一个问题,所以请对我温柔一点!我希望你能帮忙

我正在尝试使用ng repeat在HTML视图中定义一个选择框(下拉列表),以便为数组中的每个项目创建一个选择框。我已经成功地做到了这一点,但当我尝试将所需的选项放入每个选项时,我的问题就出现了

我正在使用的数组
{
“字段1”:1,
“字段2”:“Value01”,
“字段3”:“Value02”,
“参考字段”:[
{
“fieldId”:100,
“fieldValue”:“fieldValueA”
},
{
“fieldId”:101,
“fieldValue”:“fieldValueB”
}
]
}等。

我需要在数组的“顶层”中选择每个项,并且在每个选择框中,应该显示的值应该是refFields嵌套数组中的fieldValue

我目前的(坏的)代码产生了一些相当垃圾的结果。 代码如下:

<div ng-repeat="fk in fks">
        <ng-form name="fksForm">
            <select name="fkselect" ng-model="fk" ng-options="item as item.refFields for item in fks">                
            </select>
        </ng-form>
    </div>  
以下是我的JSFIDLE:

非常感谢您的建议

使用,您可以为ng选项准备数据

对我来说,这看起来很复杂。我会重新考虑是否可以修改数据结构。我不能推荐一个结构,因为我不知道最终结果会是什么样子

我创建了两个数组,一个是用于
ng repeat
的字段名,另一个数组是用于选项的
refFields

使用
$index
可以获取
ng repeat
的当前索引,以访问
refFields

我不确定我是否正确创建了此字段,因为我不知道您在使用
字段1
字段2
字段3
值做什么

请看一下这个或下面的演示(相同的代码)

var myApp=angular.module('myApp',[]);
myApp.controller('DetailsCtrl',['$scope',函数($scope){
风险值数据=[
{
“字段1”:1,
“字段2”:“Value01”,
“字段3”:“Value02”,
“参考字段”:[
{
“fieldId”:100,
“fieldValue”:“fieldValueA”
},
{
“fieldId”:101,
“fieldValue”:“fieldValueB”
}
]
},
{
“字段1”:2,
“字段2”:“Value03”,
“字段3”:“Value04”,
“参考字段”:[
{
“fieldId”:102,
“fieldValue”:“fieldValueA”
},
{
“fieldId”:103,
“fieldValue”:“fieldValueB”
},
{
“fieldId”:104,
“fieldValue”:“fieldValueC”
},
{
“fieldId”:105,
“fieldValue”:“fieldValue”
}
]
},
{
“字段1”:3,
“字段2”:“Value05”,
“字段3”:“Value06”,
“参考字段”:[
{
“fieldId”:106,
“fieldValue”:“fieldValueA”
},
{
“fieldId”:107,
“fieldValue”:“fieldValueB”
}
]
}
];
$scope.fks=\ux.map(数据、函数(字段){
return u.omit(field,['field1','field2','field3'])。refFields;//仅refFields
});
log($scope.fks);
$scope.fields=\.map(数据、,
功能(字段){
控制台日志(字段);
返回[field.field1,field.field2,field.field3];
}
);
//console.log(结果)
$scope.dropdown={};
$scope.changedValue=函数(索引){
log(索引$scope.dropdown);
log($scope.dropdown[index]);
}
}]);

{{fk}}

您的数据很好,有一种更简单的方法:利用该
fk
并直接从中获取
refFields
,因此
ng options=“item as item.fieldValue for item in fk.refFields”

有关完整代码:

angular.module('myApp',[])
.controller('myCtrl',function($scope,$timeout) {
    $scope.fks = [
      {
        "field1": 1,
        "field2": "Value01",
        "field3": "Value02",
        "refFields": [
          { "fieldId": 100,  "fieldValue": "1fieldValueA" },
          { "fieldId": 101, "fieldValue": "1fieldValueB" }
        ]
      },
      {
        "field1": 2,
        "field2": "Value03",
        "field3": "Value04",
        "refFields": [
          { "fieldId": 102, "fieldValue": "2fieldValueA" },
          { "fieldId": 103, "fieldValue": "2fieldValueB" },
          { "fieldId": 104, "fieldValue": "2fieldValueC" },
          { "fieldId": 105, "fieldValue": "2fieldValueD" }
        ]
      },
      {
        "field1": 3,
        "field2": "Value05",
        "field3": "Value06",
        "refFields": [
          { "fieldId": 106, "fieldValue": "3fieldValueA" },
          { "fieldId": 107, "fieldValue": "3fieldValueB" }
        ]
      }
    ];
});
当然,还有


现在,不要问我如何初始化这些列表中特定项目的选择:这就是我在这里寻找的内容。

从您的示例中不清楚retFields中的值如何与上述值相对应,但我建议您将控制器中的数据预处理为更标准的格式,然后应该是直接的。非常感谢,这为我提供了将嵌套值放入选择框所需的内容。我不知道我能够在ng选项中使用$index。我还将更详细地研究underline.js,以备将来使用,不过我将在可能的情况下尝试将数据转换为更标准的格式。
<div ng-app="myApp" ng-controller="myCtrl">
    <div ng-repeat="fk in fks">
        <label>{{fk.field2}}</label>
        <select ng-model="fk.selectedItem" ng-options="item as item.fieldValue for item in fk.refFields">              
        </select>      
    </div>  
</div>
angular.module('myApp',[])
.controller('myCtrl',function($scope,$timeout) {
    $scope.fks = [
      {
        "field1": 1,
        "field2": "Value01",
        "field3": "Value02",
        "refFields": [
          { "fieldId": 100,  "fieldValue": "1fieldValueA" },
          { "fieldId": 101, "fieldValue": "1fieldValueB" }
        ]
      },
      {
        "field1": 2,
        "field2": "Value03",
        "field3": "Value04",
        "refFields": [
          { "fieldId": 102, "fieldValue": "2fieldValueA" },
          { "fieldId": 103, "fieldValue": "2fieldValueB" },
          { "fieldId": 104, "fieldValue": "2fieldValueC" },
          { "fieldId": 105, "fieldValue": "2fieldValueD" }
        ]
      },
      {
        "field1": 3,
        "field2": "Value05",
        "field3": "Value06",
        "refFields": [
          { "fieldId": 106, "fieldValue": "3fieldValueA" },
          { "fieldId": 107, "fieldValue": "3fieldValueB" }
        ]
      }
    ];
});