4

私は持っている:

    businesses: [
    {businessName: 'A', "address":[loc1, loc2, loc3]},
    {businessName: 'B', "address":[loc1, loc2]},
    {businessName: 'C', "address":[loc1]}
};

このオブジェクトを出力で ng-repeat したい:

A | street, city, zip, state 
A | street, city, zip, state 
A | street, city, zip, state 
B | street, city, zip, state 
B | street, city, zip, state 
C | street, city, zip, state 

つまり、このオブジェクトをng-repeatで表にフラットに表示したいのです。

自分でフラット化する必要がありますか、それとも ng-repeat にはこれを行う力がありますか?

理想的には、次のようなことができます

ng-repeat business in businesses
business.businessName | business.address.City | business.address.State

アドレスを指定することで、私がそれらすべてを必要としていることがわかるはずです。

それ以外の場合、このようなオブジェクトをフラット化するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

4

次のように、少し処理できるようです。

var flatBusinesses = [];
for (business in businesses) {
    for (address in business.addresses) {
        flatBusinesses.push ({name: business.name, address: address.City, state: address.State}
    }
}

そして、ビューで flatBusinesses を繰り返すだけです

于 2013-06-12T22:14:19.367 に答える
3

アンダースコア ライブラリには、angular を補完するものとして適切に機能する JavaScript 配列およびオブジェクトを処理するための関数が多数あります。

http://underscorejs.org/

ライブラリをダウンロードしてプロジェクトに追加する必要があります。

次に、次のように記述できます。

var flatBusinesses = _.flatten(_.pluck(businesses, 'address'));

アンダースコア ライブラリをスコープに追加できるはずです。

$scope._ = _;

そして、これをテンプレートに直接追加します。

<div ng-repeat="business in _.flatten(_.pluck(businesses, 'address'))">
{{business.businessName}} | {{business.address.City}} | {{business.address.State}}
</div>

編集:

だから、私はあなたの質問を十分に注意深く読んでいませんでした。

アンダースコアをいじって動作させるフィドルをまとめましたが、最終結果はrquinn の応答を改善するものではありません。

とにかく、それを見たい場合は、ここにフィドルがあります:http://jsfiddle.net/pna7f5h3/

于 2013-06-12T22:40:20.307 に答える