mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-04-02 14:30:23 +00:00
68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* @ngdoc directive
|
|
* @name ng.directive:ngTransclude
|
|
* @restrict AC
|
|
*
|
|
* @description
|
|
* Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
|
|
*
|
|
* Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
|
|
*
|
|
* @element ANY
|
|
*
|
|
* @example
|
|
<doc:example module="transclude">
|
|
<doc:source>
|
|
<script>
|
|
function Ctrl($scope) {
|
|
$scope.title = 'Lorem Ipsum';
|
|
$scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
|
|
}
|
|
|
|
angular.module('transclude', [])
|
|
.directive('pane', function(){
|
|
return {
|
|
restrict: 'E',
|
|
transclude: true,
|
|
scope: { title:'@' },
|
|
template: '<div style="border: 1px solid black;">' +
|
|
'<div style="background-color: gray">{{title}}</div>' +
|
|
'<div ng-transclude></div>' +
|
|
'</div>'
|
|
};
|
|
});
|
|
</script>
|
|
<div ng-controller="Ctrl">
|
|
<input ng-model="title"><br>
|
|
<textarea ng-model="text"></textarea> <br/>
|
|
<pane title="{{title}}">{{text}}</pane>
|
|
</div>
|
|
</doc:source>
|
|
<doc:scenario>
|
|
it('should have transcluded', function() {
|
|
input('title').enter('TITLE');
|
|
input('text').enter('TEXT');
|
|
expect(binding('title')).toEqual('TITLE');
|
|
expect(binding('text')).toEqual('TEXT');
|
|
});
|
|
</doc:scenario>
|
|
</doc:example>
|
|
*
|
|
*/
|
|
var ngTranscludeDirective = ngDirective({
|
|
controller: ['$transclude', function($transclude) {
|
|
// remember the transclusion fn but call it during linking so that we don't process transclusion before directives on
|
|
// the parent element even when the transclusion replaces the current element. (we can't use priority here because
|
|
// that applies only to compile fns and not controllers
|
|
this.$transclude = $transclude;
|
|
}],
|
|
|
|
link: function($scope, $element, $attrs, controller) {
|
|
controller.$transclude(function(clone) {
|
|
$element.html('');
|
|
$element.append(clone);
|
|
});
|
|
}
|
|
});
|