如何从transclude函数访问转置槽?

ada*_*ort 3 angularjs angularjs-ng-transclude

Angular 1.5引入了多插槽转换.根据文件:

transclude对象{slotA:'?myCustomElement'}将元素映射到slotA插槽,可以通过$ transclude函数访问

不幸的是,它没有给出任何这方面的例子.它给出的唯一例子根本没有提到插槽:

$transclude(function(clone, scope) {
  element.append(clone);
  transcludedContent = clone;
  transclusionScope = scope;
});
Run Code Online (Sandbox Code Playgroud)

有人可以使用$ transclude函数了解如何访问每个插槽吗?

sie*_*kos 12

我有类似的问题,但阅读ng-transclude的源代码有帮助.事实证明,$ transclude函数有第三个参数,即插槽名称.

https://github.com/angular/angular.js/blob/master/src/ng/directive/ngTransclude.js#L190

简单的例子:

angular.module('app', []);

angular
  .module('app')
  .directive('dir', function () {
    return {
      transclude: {
        a: 'aT',
        b: 'bT'
      },
      link: function (scope, elem, attrs, ctrl, transclude) {
        transclude(function (content) {
          elem.append('<div>a</div>');
          elem.append(content);
        }, null, 'a');
        
        transclude(function (content) {
          elem.append('<div>b</div>');
          elem.append(content);
        }, null, 'b');
      }
    };
  });
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script>

<div ng-app="app">
  <dir>
    <a-t>content of a</a-t>
    <b-t>content of b</b-t>
  </dir>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 这不是100%正确.可以使用第一个可选(此处:unused)参数更改范围.`null`适用于`futureParentElement`参数.但是,slot参数是正确的.完整的声明是`function([scope],cloneLinkingFn,futureParentElement,slotName)`(来源:https://docs.angularjs.org/api/ng/service/$compile) (5认同)