AngularJS中的transclusion类似于包含关系。
通常,这样定义一个directive:
<mydirective someprop=""></mydirective>
转换成html可能是这样的:
<div>
<div class="someclass">
</div
</div>
现在,想在类名为someclass的div中放置一些动态内容,即:
<div>
<div class="someclass">
这里有一些动态内容
</div
</div>
如何做到呢?
1、在template中通过属性或者元素的方式标记放置动态内容的位置,比如<ng-transclude></ng-transclude>
2、在directive的返回对象中增加transclude: true
假设,有这样的一个Directive:
(function(){
var transclusion = function(){
var template = '<div>Name:<input type="text" ng-model="vm.title"/> ' +
'<button ng-click="vm.addTask()">Add Task</button>' +
'<div class="taskContainer"><br/>' +
'<ng-transclude></ng-transclude>' +
'</div></div>',
controller = function(){
var vm = this;
vm.addTask = function(){
if(!vm.tasks) vm.task = [];
vm.tasks.push({
title: vm.title
});
}
}; return {
restrict: 'E',
transclude: true,
scope: {
tasks:'='
},
controller: controller,
controllerAs: 'vm',]
bindToController: true,
template: template
}
}; angular.module('direcitiveModule')
.directive('transclusion', transclusion);
}());
在页面大致这样使用:
<transclusion tasks="tasks">
<div ng-repeat="task in tasks track by $index">
<strong>{{task.title}}</strong>
</div>
</transclusion> $scope.tasks = [{title: 'Task 1'}];