如何从指令链接功能访问transclude函数

时间:2014-05-16 23:41:17

标签: angularjs angularjs-directive

简短的问题 如何使用Angular 1.1.1访问指令链接函数中的transclude函数?

我想要实现的目标

这是(破碎的)小提琴http://jsfiddle.net/michaeldausmann/7NXZs/

我正在尝试写一个'包装'指令......

<wrapper-dynamic>
    <h2>Wrap me Dynamically!</h2>
</wrapper-dynamic>

...动态模板将包含ng-transclude ...

var tmpl = "<div>Dynamic Wrapper version {{wrapperVersion}}</div><hr/><div ng-transclude></div>";

...我在链接函数中编译它....

var thing = $compile(tmpl)(scope)
element.append(thing);

这失败并出现错误....“undefined不是函数”

我想我需要将一个transclude函数传递给$ compile ...

$ compile(tmpl,transcludefn)(范围)

但是我不确定如何访问转码函数...它似乎在链接函数参数中不可用,就像它在稍后版本的angular中一样。

迈克尔

1 个答案:

答案 0 :(得分:1)

在AngularJS 1.2之前,您必须定义compile函数以获取对transclude函数的引用:

app.directive('myDirective', function($compile) {

  return {
    transclude: true,
    compile: function compile(tElement, tAttrs, transcludeFn) {

      return function postLink(scope, element, attributes) {

        console.log(transcludeFn);

      };
    }
  };
});

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