【问题标题】:How can I use the existing ng-repeat directive in my custom directive?如何在我的自定义指令中使用现有的 ng-repeat 指令?
【发布时间】:2016-02-22 07:46:00
【问题描述】:

我想创建一个指令,它接受一个字符串数组,并将它们组织在一个表中,每行有 4 个字符串。

例如,数组['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 将呈现为:

a b c d
e f g h

为此,我可以轻松编写一个link 函数,手动操作 DOM(jQuery 样式)并呈现此表。

但这感觉不对,因为我们已经有诸如ng-repeat 之类的指令可以完成一半的工作。我想使用可以提供帮助的现有东西,并且只对新功能进行编码。

我怎样才能做到这一点?

【问题讨论】:

  • 您的问题无法回答。没有“正确的方法”来完成每一项任务,而排除所有其他方法;完成任务有好方法,也有完成任务的坏方法。在您的特定情况下,可以显示另一种完成任务的好方法,但这并不是唯一正确的方法,也不是您应该完成所有类似任务的方法。因此,你应该问的是你说过不想让任何人回答的一件事。
  • 有两种常见的处理方式,主要取决于您是否使用响应式框架。 stackoverflow.com/questions/27211799/… 有几个例子;一种方法是使用响应式重置,而根本不尝试控制 DOM。另一种方法是将数据分块成一个数组数组,并使用两个ng-repeat 将外部数组迭代为行,将内部数组迭代为列。
  • 你是对的,尽管你认为操纵 DOM 并不是真正的角度方式。
  • @Claies 关于第二个选项:ng-repeat 会进入指令对象的template 字段,还是进入页面的实际模板?
  • 如果你正在编写一个可重用的指令,你可以把重复的部分放在模板中。您也可以不使用指令,而是编写一个执行数据分离并将数据保存在控制器中的服务,这将为您提供更多的输出灵活性,特别是如果您希望内部数组遍历多个数据字段。

标签: javascript angularjs web frontend


【解决方案1】:

是的,你只需要指定模板(通过template或templateUrl),并在里面使用你的变量。

记得将属性映射到作用域变量,然后你就可以使用它而无需额外的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多