Ich habe eine Liste in meinem Controller, die von ng-repeat verwendet wird, um meine Direktive zu erstellen. In meiner Richtlinie verwende ich die Transklusion, um an das Element der Richtlinie anzuhängen.AngularJS: Der in der Direktive enthaltene Inhalt verschwindet
Beim Hinzufügen des ersten Elements zu meiner Liste scheint es wie erwartet zu funktionieren, aber wenn ein zweites Element hinzugefügt wird, verschwindet der übersetzte Inhalt aus dem Element des ersten Elements. Das macht für mich keinen Sinn, deshalb muss ich etwas falsch verstehen.
Ich habe eine example erstellt, die das Problem neu erstellt.
Nach dem ersten Element hinzugefügt wird, sucht der HTML wie erwartet:
<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>
Nach dem zweiten Element hinzugefügt wird, der transkludiert Inhalt ist nicht mehr in dem Element des ersten Elements!
<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>
Typoskript:
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/
Verwendung ng-transcluden Attribut mit Test-Richtlinie, könnte es anfangen zu arbeiten ... für weitere Informationen siehe http://teropa.info/blog/2015/06/09/transclusion.html – Ajay