Angular.js ngOptions迭代JSON对象

时间:2014-09-26 17:27:06

标签: json angularjs angularjs-ng-options

ng-options=""在没有 ng-repeat=""的情况下迭代JSON对象的最佳方法是什么... 为了检索所有值。

  $scope.examples = 
  [
    {"name":"parent 1",
        "subs":  [
            {"name":"child a", "id":"1a"},  
            {"name":"child b", "id":"1b"}
        ]
    },
    {"name":"parent 2",
        "subs":  [
            {"name":"child a", "id":"2a"},  
            {"name":"child b", "id":"2b"}
        ]
    }
  ];

对于在<option>

中呈现的<select>,应该返回 1a,1b,2a,2b

我错误地想到了......

<select ng-model="data.sub" ng-options="item.id for item in examples.example.subs"></select>

...将迭代子对象。我需要一个单独的功能吗?某种范围的定义? 任何帮助表示赞赏。

http://jsfiddle.net/G9jGa/71/

1 个答案:

答案 0 :(得分:2)

我认为这是一个非常相似的问题:

   http://stackoverflow.com/questions/24860452/double-loop-to-get-ng-options

根据答案,使用ng-options的嵌套结构是不可能的。 您可以做的是将数据展平为数组。

我也擅长更新你的jsfiddle。 请查看:

    http://jsfiddle.net/G9jGa/72/

以下代码是我为使其工作而添加的代码:

    var app = angular.module('app', []);

    app.controller('Ctrl', function($scope) {
      $scope.examples = 
      [
       {"name":"parent 1",
        "subs":  [
          {"name":"child a", "id":"1a"},  
          {"name":"child b", "id":"1b"}
        ]
       },
       {"name":"parent 2",
        "subs":  [
           {"name":"child a", "id":"2a"},  
           {"name":"child b", "id":"2b"}
        ]
       }
    ];


   function flattenArray(array, fn)  {
      var output = [];
      for(var i = 0; i < array.length; ++i) {
         var result = fn(array[i]);
         if (result) 
            output = output.concat(result);
      }
      return output;
   }

   $scope.Groups = flattenArray($scope.examples, function(item) { 
        return item.subs;
   });