21

假设我有一个名为<my-directive>. 它做了一些 html 渲染和事件处理,它经过了彻底的测试。

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

<wrapper>
   <my-directive></my-directive>
</wrapper>

并且有:

<div class="my-div">
   <my-directive></my-directive>
</div>

怎样才能做到这一点?我之前尝试过一些方法,它们似乎都没有工作,所以我没有发布任何代码。

4

2 回答 2

27

您可以创建包装指令,如

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

演示:Plunker

于 2013-03-26T11:03:35.620 回答
20

听起来您ng-transclude在外部模板中缺少并且transclude在外部指令中设置为 true。该ng-transclude属性告诉编译器何时将内部 html 插入transcludetrue

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

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

于 2013-03-26T11:10:22.387 回答