如何使用AngularJS渲染动态定义列表?

Max*_*asy 71 angularjs

如何使用AngularJS渲染动态定义列表?

例:

数据:

[
    {
        key: 'a',
        value: 'x'
    }, {
        key: 'b',
        value: 'y'
    }
]
Run Code Online (Sandbox Code Playgroud)

期望的HTML:

<dl>
    <dt>a</dt>
    <dd>x</dd>
    <dt>b</dt>
    <dd>y</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

http://docs.angularjs.org/tutorial/step_08上的示例:

<dl>
    <dt>Availability</dt>
    <dd ng-repeat="availability in phone.availability">{{availability}}</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

适用于动态数量的dds和静态dts数,但不是两者的动态数.

Ale*_*øld 100

Angular 1.2中添加了一个允许ng-repeat-start/ng-repeat-end的新功能.

有了这个功能,你可以像这样写你的html:

<dl>
  <dt ng-repeat-start="i in items">{{i.key}}</dt>
  <dd ng-repeat-end>{{i.value}}</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

请参阅此plnkr以获取完整的工作示例.

  • @gevgeny似乎有一个错误,你不能在ng-repeat-start和ng-repeat-end之间有任何文本(包括空格).这个plunker工作:http://plnkr.co/edit/9BhyYhQlQMRZtZKIsZ8G (2认同)

big*_*ind 9

我已经创建了一个名为repeatInside的指令来解决像这样的问题.

<dl repeat-inside="word in dictionary">
    <dt>{{word.name}}</dt>
    <dd>{{word.definition}}</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)


Voj*_*jta 7

这是一个问题,因为你需要用一些元素包装它才能重复.这不会是一个有效的HTML - 你会遇到无序列表或表格的同样麻烦...

<dl>
  <div ng-repeat="i in items">
    <dt>{{i.key}}</dt>
    <dd>{{i.value}}</dd>
  </div>
</dl>
Run Code Online (Sandbox Code Playgroud)

我想div内部版本dl不允许使用,但它可以工作 - 至少在Chrome中是这样的:-D

我们计划ng-repeat在评论中支持这一点.

  • 我接受你的回答并不是因为你的解决方法确实有效(例如http://jsfiddle.net/JyWdT,至少在Chrome中没有完全发挥作用(所有元素都应该是彩色的)),但是因为你是一个Angular开发人员说这是不可能的,因此我认为这是不可能的. (2认同)
  • 这可能是使用自定义指令完成的吗? (2认同)
  • 或者像你之前的spry你可以有一个名为ng-repeat-children的指令,它不使用指定了指令的元素,而只使用它的子节点. (2认同)