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);}//在父作用域的上下文中执行函数