从另一个指令中添加指令,会使浏览器挂起。
我想做的是
<h7></h7>
1)在 compile 函数中更改自定义元素指令(如)。通过这样做,浏览器挂起。
代码:
<h7>TEST</h7>
animateAppModule.directive('h7', function($compile){
return {
restrict:"E",
compile:function(tElement, tAttrs, transclude){
tElement[0].setAttribute("ng-class", "{selected:istrue}");
return function(scope, iElement, iAttrs){
//$compile(iElement)(scope);
}
}
}
})
如果我取消注释此行//$compile(iElement)(scope);
,浏览器将挂起。您可以取消注释此小提琴http://jsfiddle.net/NzgZz/3/中的上述行以查看浏览器挂起。
但是,如果我在指令中有模板属性,则不会发生浏览器挂起h7
,如this fiddle所示。http://jsfiddle.net/KaGRt/1/。
总的来说,我想要实现的是
我想在个人指令的帮助下使用新功能来修改模板。类似于装饰器模式。我在指令链中的指令的编译函数中执行此操作,以便它影响该模板的所有实例。
我正在努力实现的伪示例。
<xmastree addBaloon addSanta></xmastree>
1)说 xmastree 有一个模板 -<div class="xmastree" ng-class={blinks:isBlinking}></div>
2)说addBaloon
有一个模板<div class="ballon" ng-class={inflated:isinflated}></div>
然后,addBaloon
编译功能应该将模板从步骤1扩充到这样的东西
<div class="xmastree" ng-class={blinks:isBlinking}>
<div ng-repeat = "ballon in ballons">
<div class="ballon" ng-class={inflated:isinflated}></div>
</div>
</div>
3)说addSanta
有一个模板<div class="santa" ng-class={fat:isFat}></div>
然后,addSanta
编译功能应该将模板从第2步扩充到这样的东西
<div class="xmastree" ng-class={blinks:isBlinking}>
<div ng-repeat = "ballon in ballons">
<div class="ballon" ng-class={inflated:isinflated}></div>
</div>
<div ng-repeat = "santa in santas">
<div class="santa" ng-class={fat:isFat}></div>
</div>
</div>
在所有编译之后,如果我针对具有合适属性的范围运行从 step3 派生的模板,我应该能够获得 HTML。