【问题标题】:How do I access the transclude function from a directive link function如何从指令链接函数访问 transclude 函数
【发布时间】:2014-05-16 23:41:17
【问题描述】:

小问题 如何使用 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);

这失败并出现错误....“未定义不是函数”

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

$compile(tmpl, transcludefn)(范围)

但我不确定如何访问 transclude 函数...它在链接函数参数中似乎不可用,就像它在 更高版本 angular 版本中一样。

迈克尔

【问题讨论】:

  • 小提琴到底出了什么问题?
  • 小问题:你为什么使用这么旧的 Angular 版本?
  • Matt,该指令的动态版本引发了“未定义不是函数”错误。专家,我正在为使用早期版本的大型应用程序构建指令。

标签: angularjs angularjs-directive


【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 2015-05-02
  • 2013-04-24
  • 1970-01-01
相关资源
最近更新 更多