1

すべての値を取得するために ...なしng-options=""で JSON オブジェクトを反復処理する最良の方法は何ですか? ng-repeat=""

  $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"}
        ]
    }
  ];

単一でレンダリングされた場合、 1a、1b、2a、2bを返す必要があります。<option><select>

みたいなのを間違って思ってしまった…

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

...サブオブジェクトを反復します。別の機能が必要ですか?ある種のスコープ定義?どんな助けでも大歓迎です。

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

4

1 に答える 1

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;
   }); 
于 2014-09-26T17:44:57.213 に答える