Javascript 角度1.5嵌套ng重复关系json

Javascript 角度1.5嵌套ng重复关系json,javascript,arrays,angularjs,json,angularjs-ng-repeat,Javascript,Arrays,Angularjs,Json,Angularjs Ng Repeat,我只是花了几个小时来寻找这个问题的解决方案,但找不到任何类似的问题 结果应该是材质与颜色链接。我想在ng选项的值中显示材质和颜色以及颜色ID 视图: 控制器: if(respondeObj.status == 'ok') { $scope.materialsObj = respondeObj.materials; $scope.colorsObj = []; angular.forEach(respondeObj.materials, function(value

我只是花了几个小时来寻找这个问题的解决方案,但找不到任何类似的问题

结果应该是材质与颜色链接。我想在ng选项的值中显示材质和颜色以及颜色ID

视图:

控制器:

if(respondeObj.status == 'ok') {    
    $scope.materialsObj = respondeObj.materials;
    $scope.colorsObj = [];
    angular.forEach(respondeObj.materials, function(value , key) {
        var putish = value.color[0];
        this.push(putish);
    }, $scope.colorsObj);
}
我只是无法获得列表的单独颜色值和颜色ID作为选择器值传递


当前结果如图所示:

如果我理解正确,您的问题是因为在构建$scope.colorsObj数组后,其中将包含对象:

$scope.colorsObj  = [
    {"1": "green"},
    {"3": "yellow"}
];

然后,您需要进行另一次ng重复,以实现您的目标,例如:

<div ng-repeat="obj in colorsObj">
    <div ng-repeat="(key, value) in obj">
        {{key}} : {{value}}
    </div>
</div>

{{key}}:{{value}
如果有帮助,请告诉我。谢谢

根据我的评论

编辑-我忘记了ng optons属性,该属性允许您使用对象作为选项的选定值。通过将第一个选择更改为使用ng选项,您只需添加键过滤器,并使用my
HTML
部分中第二个下拉列表的代码,即可从material.color获取键/值

HTML
当然,也有一个选项,即“颜色”中有与一种材质相关的两种颜色:[{“1”:“绿色”}]为什么不创建一个$scope.currentMaterial变量来存储当前选定的材质对象?然后您可以使用ng repeat=“color in currentMaterial.colors”您能举一个您希望获得的所需“值”的例子吗?对不起,可能只是我,但我不知道你到底想在这里做什么。@panatoni我已经更新了我的解决方案,使之更简单。我忘了使用ng选项-这正是您想要的。希望有帮助!OP想要,而不是。@mhodges这只是为了解释问题的原因“您需要另一个ng重复来实现您想要的”,而您的代码适用于您的示例,但它不适用于OP,因为您不能在其中嵌套ng重复。我认为这只是一种从根本上解决问题的有缺陷的方法。事实上,这是我想要实现的,但仍然存在这个问题,正如你所说,不能在选择中嵌套ng repeat in ng repeat in ng repeat…我不知道它是否完全可以,但基本上,当我喜欢它时,它可以工作>{{value}}

$scope.colorsObj  = [
    {"1": "green"},
    {"3": "yellow"}
];
<div ng-repeat="obj in colorsObj">
    <div ng-repeat="(key, value) in obj">
        {{key}} : {{value}}
    </div>
</div>
<select ng-model="currentMaterial"
          ng-options="material as material.name for material in materialsObj"></select>
<select ng-if="currentMaterial">
  <option ng-repeat="color in currentMaterial.color" value="{{id}}" ng-init="id = (color | keysFilter)">{{color[id]}}</option>
</select>
var app = angular.module("myApp", [])
.filter("keysFilter", function () {
  return (function (item){
    if (!item) {
      return [];
    }
    var keys = Object.keys(item);
    return keys[0];
  });
})
.controller("myCtrl", function ($scope){
  $scope.currentMaterial = {};
  $scope.materialsObj = [
    {
      "id": 1,
      "name": "drewno",
      "color": [
        {
          "1": "green"
        },
        {
          "2": "yellow"
        }
      ]
    }, 
    {
      "id": 2,
      "name": "pla",
      "color": [
        {
          "3": "yellow"
        },
        {
          "4": "purple"
        },
        {
          "5": "brown"
        }
      ]
    }
  ];
});