使用自定义HTML包装指令(另一个指令)

Łuk*_*man 21 angularjs angularjs-directive

假设我有工作指令叫<my-directive>.它做了一些HTML渲染和事件处理,它经过了彻底的测试.

现在我想用另一个包装器指令包装这个指令,该指令<wrapper>将呈现这个html片段<div class="my-div">,这样我就可以编写如下代码:

<wrapper>
   <my-directive></my-directive>
</wrapper>
Run Code Online (Sandbox Code Playgroud)

并有:

<div class="my-div">
   <my-directive></my-directive>
</div>
Run Code Online (Sandbox Code Playgroud)

怎么能实现呢?我以前尝试过一些方法,它们似乎都没有工作,所以我没有发布任何代码.

Aru*_*hny 27

您可以创建包装器指令

app.directive('wrapper', function() {
  return {
    restrict: 'E',
    replace: true,
    transclude: true,
    template: '<div class="my-div" ng-transclude></div>'
  };
});
Run Code Online (Sandbox Code Playgroud)

演示:Plunker


cha*_*tfl 20

听起来你ng-transclude在外模板中缺少并transclude在外部指令中设置为true.该ng-transclude属性告诉编译器wheere在transclude设置为时插入内部htmltrue

app.directive('wrapper',function(){
 return {
   restrict:'E',
   template: '<div>Outer wrapper text<div ng-transclude></div></div>',
   transclude: true,
   replace:true
 }
});
Run Code Online (Sandbox Code Playgroud)

DEMO http://plnkr.co/edit/sfbRyPZjqsTG6cuiaXZV?p=preview