У меня есть список в моем контроллере, который используется ng-repeat для создания моей директивы. В моей директиве я использую transclusion для добавления к элементу директивы.AngularJS: Transcluded содержимое в директиве исчезает
При добавлении первого элемента в мой список оно работает, как ожидалось, но при добавлении второго элемента скрытый контент исчезает из элемента первого элемента. Это не имеет никакого смысла для меня, поэтому должно быть что-то, что я недопонимаю.
Я создал example, который воссоздает проблему.
После добавления первого элемента, то HTML выглядит как ожидалось:
<div ng-controller="ctrl as c" class="ng-scope">
<test ng-repeat="item in c.items track by $index" item="item" class="ng-scope ng-isolate-scope">
<div class="ng-binding">1</div>
<span class="ng-scope">Transcluded</span>
</test>
</div>
После добавления второй элемент, содержание включены через больше не в элементе первого элемента!
<div ng-controller="ctrl as c" class="ng-scope">
<test ng-repeat="item in c.items track by $index" item="item" class="ng-scope ng-isolate-scope">
<div class="ng-binding">1</div>
</test>
<test ng-repeat="item in c.items track by $index" item="item" class="ng-scope ng-isolate-scope">
<div class="ng-binding">2</div>
<span class="ng-scope">Transcluded</span>
</test>
</div>
HTML:
<div ng-app="ui">
<div ng-controller="ctrl as c">
<test ng-repeat="item in c.items track by $index" item="item">Transcluded</test>
</div>
</div>
Машинопись:
var app = angular.module('ui', []);
class Controller {
public items = [];
constructor($timeout) {
$timeout(() => this.items.push({Id: 1}), 1000);
$timeout(() => this.items.push({Id: 2}), 2000);
}
}
app.controller('ctrl', ['$timeout', Controller]
app.directive('test', function($compile) {
return {
scope: {
item: '='
},
transclude: true,
template: "<div>{{item.Id}}</div>"
link: function(scope, element, attrs, controller, transcludeFn) {
console.log("Appending transcluded content to " + scope.item.Id)
let e = transcludeFn();
element.append(e);
}
};
});
JSFiddle: https://jsfiddle.net/rmytw9cr/2/
использование нг-transclude атрибут с тестовой директивой, он может начать работать ... для получения дополнительной информации см http://teropa.info/blog/2015/06/09/transclusion.html – Ajay