2012-05-05 11 views
70

AngularJSを使用して動的定義リストをレンダリングするにはどうすればよいですか?AngularJSを使用して動的定義リストをレンダリングするにはどうすればよいですか?

例:

データ:

[ 
    { 
     key: 'a', 
     value: 'x' 
    }, { 
     key: 'b', 
     value: 'y' 
    } 
] 

所望のHTML:

<dl> 
    <dt>a</dt> 
    <dd>x</dd> 
    <dt>b</dt> 
    <dd>y</dd> 
</dl> 

http://docs.angularjs.org/tutorial/step_08で例:DDSとの動的な数の

<dl> 
    <dt>Availability</dt> 
    <dd ng-repeat="availability in phone.availability">{{availability}}</dd> 
</dl> 

作品スタティックニューdtsのmberは、両方の動的な数ではありません。

答えて

99

ng-repeat-start/ng-repeat-endを可能にする新しい機能がAngular 1.2で追加されました。フルワーキング例えば

<dl> 
    <dt ng-repeat-start="i in items">{{i.key}}</dt> 
    <dd ng-repeat-end>{{i.value}}</dd> 
</dl> 

参照this plnkr

この機能を使用すると、このようにHTMLを書くことができます。

+0

この機能を使用しようとしましたか?'TypeError:Object#にはメソッドがありません 'hasAttribute'' –

+2

@gevgeny ng-repeat-startとng-repeat-endの間にテキスト(空白を含む)を入れることができないバグがあるようです。このプランカは動作します:http://plnkr.co/edit/9BhyYhQlQMRZtZKIsZ8G –

+0

あなたが正しいように見えます。ありがとうございました。 –

7

これは、繰り返しを行うためにいくつかの要素でラップする必要があるため、問題です。少なくともに - 私はdl内部divは仕様によって許可されますが、それが動作されていないと思います

<dl> 
    <div ng-repeat="i in items"> 
    <dt>{{i.key}}</dt> 
    <dd>{{i.value}}</dd> 
    </div> 
</dl> 

...あなたは順不同リストまたはテーブルと同じトラブルになるだろう

- そして、それは有効なHTMLなるつもりはありませんChrome :-D

ng-repeatをサポートする予定です。

+2

私はあなたの答えを受け付けていないので、よあなたの回避策は実際には機能します(http://jsfiddle.net/JyWdT、少なくともChromeでは完全に機能しません(すべての要素は色付きでなければなりません))が、不可能だと言っているAngularデベロッパーであるため私はそれが不可能だと仮定します。 –

+0

やや好きなデモンストレーション:http://jsfiddle.net/MaxNanasy/nEDyk –

+0

問題は、htmlでこれらの要素をラップすることができないことです。その要素は許可されていません。それで私たちのコンパイラがコメント内でディレクティブをサポートしているので、コメントに将来定義されるng-repeatを許可することができます... – Vojta

9

このような問題を解決するためにrepeatInsideというディレクティブを作成しました。

<dl repeat-inside="word in dictionary"> 
    <dt>{{word.name}}</dt> 
    <dd>{{word.definition}}</dd> 
</dl> 
+1

ニースとシンプルな、私は提案された公式の "スタート"/"エンド"の指示よりもこれがよかった。 – EventHorizon

+0

角度の大きい作品<1.2 – MANCHUCK

+0

私はこれを熟練していないので、今日の午後(GMT + 1)に見てみましょう – bigblind

3

私は私のためによく働いわずかな変化を投稿したかったので、この答えは、角度v1.2.7で私のために動作していないようでした:

<dl> 
    <dt ng-repeat-start="(key, value) in items">{{key}}</dt> 
    <dd ng-repeat-end>{{value}}</dd> 
</dl> 
+0

'items'のように見えますが、オブジェクトの配列ではありません... – PhiLho

関連する問題