【问题标题】:AngularJS Directive which can compile another directive with access to parent controllerAngularJS 指令,它可以编译另一个可以访问父控制器的指令
【发布时间】:2014-01-29 06:16:04
【问题描述】:

首先是我在一个简短的伪代码中遇到的问题:

<book-ui>
    <icon> <!-- can access controller -->
    <icon-static> <!-- compiled and can not access controller -->
    <icon-animated><!-- compiled can not access controller -->
</book-ui>

这是我的解释:

  1. 我有一个父指令&lt;bookd-ui&gt;,它有一个控制器
  2. 我有一个子指令&lt;icon&gt;,它应该根据通过数据属性&lt;icon data="someData"&gt;&lt;/icon&gt; 传递给它的数据编译其他指令
  3. 另外两个指令&lt;icon-static&gt;&lt;icon-animated&gt; 应该能够访问&lt;book-ui&gt; 控制器(它们是&lt;book-ui&gt; 的孩子)

这是我的例子,&lt;icon&gt; 指令根据某些条件成功编译了另外两个指令,&lt;icon&gt; 指令可以访问&lt;book-ui&gt; 控制器。

http://jsfiddle.net/poul_kg/Q5uHV/6/

当我将require: '^bookUi' 添加到&lt;icon-static&gt;&lt;icon-animated&gt; 指令(它们是编译指令)时,问题出现了。将require: '^bookUi' 添加到&lt;icon&gt; 指令时没有任何错误。

我为什么这样做。我想在书上添加图标,所有图标都具有相同的数据结构,但根据其类型的不同表现完全不同,所以我认为将它们分成两个不同的指令会很好。而且在模板中我更容易使用:

<icon ng-repeat="icon in book.pages[currentPage].icons" data="book.pages[currentPage].icons[$index]"></icon>

或者我应该在这里使用某种| filter: 表达式吗?

【问题讨论】:

    标签: javascript angularjs angularjs-directive angularjs-ng-repeat


    【解决方案1】:

    在实际实现中你不需要icon 指令。

    您可以使用filter: {type_id: 1} 之类的过滤器,您的指令结构将如下所示

    <book-ui>
        <icon-static data="el" ng-repeat="el in elements | filter: {type_id: 1}"></icon-static>
        <icon-animated data="el" ng-repeat="el in elements | filter: {type_id: 2}"></icon-animated>
    </book-ui>
    

    你也可以要求父指令require: '^bookUi'

    查看更新的fiddle

    【讨论】:

    • 感谢您的回答,我创建了自己的自定义过滤器,因为我需要测试 type_id 是否是集合 [1, 2, 3, 4, 5] 的元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    相关资源
    最近更新 更多