Как получить доступ к слотам включения из функции transclude?

В Angular 1.5 введено многослотовое включение. Согласно документам:

объект transclude { slotA: '?myCustomElement' } отображает элементы в слот slotA, к которому можно получить доступ через функцию $transclude

К сожалению, это не дает никаких примеров этого. Единственный пример, который он приводит, вообще не упоминает слоты:

$transclude(function(clone, scope) {
  element.append(clone);
  transcludedContent = clone;
  transclusionScope = scope;
});

Может кто-нибудь пролить свет на то, как получить доступ к каждому слоту с помощью функции $transclude?

1 ответ

Решение

У меня была похожая проблема, но помогает чтение исходного кода 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');
      }
    };
  });
<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>

Другие вопросы по тегам