Angularjs Angular.js:在嵌套转置中包装元素

Angularjs Angular.js:在嵌套转置中包装元素,angularjs,angularjs-directive,Angularjs,Angularjs Directive,这似乎是一件很简单的事情,但我就是不知道该怎么做 以下是我想要的: <my-buttons> <my-button ng-click="doOneThing()">abc</my-button> <my-button ng-click="doAnotherThing()">def</my-button> </my-buttons> abc def 这就变成了这样: <ul class="u">

这似乎是一件很简单的事情,但我就是不知道该怎么做

以下是我想要的:

<my-buttons>
  <my-button ng-click="doOneThing()">abc</my-button>
  <my-button ng-click="doAnotherThing()">def</my-button>
</my-buttons>

abc
def
这就变成了这样:

<ul class="u">
  <li class="l"><button ng-click="doOneThing()">abc</button></li>
  <li class="l"><button ng-click="doAnotherThing()">def</button></li>
</ul>
    abc 定义
请注意,
ng点击
是如何出现在包装
li
内的
按钮上的。但是,正常转义将把
ng单击
放在
li

我最好的尝试是在这把小提琴上:在那里,我用一个类替换了ng click,因此很容易看到它何时工作,何时不工作

有什么办法可以做到这一点吗?如果真的很简单,也许frontpage上的选项卡/窗格示例可以扩展为在窗格周围包含一个包装器,同时仍然保留属性。

使用replace:true,替换过程将所有属性/类从旧元素()迁移到新元素(模板中的根元素,)。Transclude将旧元素的内容移动到指定的(ng Transclude)元素。我不确定是否有简单的方法来更改模板中接收迁移属性的元素

为了实现您想要的,您可能可以在MyButton指令中的自定义编译函数中执行一些dom操作。但是,我认为最好在my button指令中创建一个新的隔离范围:


abc
def
(请注意,我已将ng单击更改为单击fn)

module.directive('myButtons',function(){
返回{
限制:'E',
是的,
替换:正确,
模板:'
    ' } }); module.directive('myButton',function(){ 返回{ 作用域:{clickFn:'&'}, 限制:'E', 是的, 替换:正确, 模板:'
  • ' } });
    我也做了一个决定


    要了解隔离作用域的工作原理(作用域:{clickFn:'&}),我建议您阅读。

    在我看来相当简单。。。替换元素的模板的根是
  • ,而
    的属性被转移到template的根元素以获得需要访问属性的更动态的模板,以便使用
    $complile
    创建模板并自己设置元素html。clickFn是否未收到新的隔离范围不,就像我说的-注意
    范围:{clickFn:'&}
    。从角度指南:&or&attr-提供了一种在父作用域上下文中执行表达式的方法。它基本上与在“myButton”控制器中执行以下操作相同:
    var fn=$parse($attrs.clickFn);//将角度表达式转换为函数,例如“doOneThing()”
    $scope.clickFn=function(){fn($scope.$parent);}//在父作用域的上下文中执行函数