UNPKG

angular-multiple-transclusion

Version:

Simple unobtrusive Angular multiple transclusion support for ng-transclude

99 lines (78 loc) 2.52 kB
# Angular Multiple Transclusion ## A concise way to use multiple `ng-transclude` directives within the same AngularJs template. Angular Multiple Transclusion extends `ng-transclude` to add support for multiple transclusion. ``` html <div class="panel panel-default"> <div class="panel-heading" ng-transclude transclude-from="header"> </div> <div class="panel-body" ng-transclude transclude-from="content"> </div> </div> ``` ## Demo http://codepen.io/mcasimir/pen/XbapYd ## Install ``` bower i --save angular-multiple-transclusion ``` ## Usage **Example task:** Create a `myPanel` directive transcluding a fragment to the header and a fragment to the body. Use `transclude-from` attribute along with `ng-transclude` directive to define insertion points for transclusion: ``` js angular.module('myApp', ['angular-multiple-transclusion']) .directive('myPanel', function(){ return { restrict: 'E', transclude: true, template: '<div class="panel panel-default">' + ' <div class="panel-heading" ng-transclude transclude-from="header">' + ' </div>' + ' <div class="panel-body" ng-transclude transclude-from="content">' + ' </div>' + '</div>' }; }); ``` Use `transclude-to` to wire each element to the respective `ng-transclude` block: ``` html <main ng-app="myApp"> <my-panel> <div transclude-to="header">Hi there!</div> <div transclude-to="content">Lorem ipsum dolor sit amet...</div> </my-panel> </main> ``` ## Works with isolated scopes ``` js .directive('myDialog', function(){ return { restrict: 'E', scope: { title: '@' }, transclude: true, template: '<div class="dialog">' + ' <div class="dialog-title">{{title}}</div>' + ' <div class="dialog-body" ng-transclude transclude-from="content">' + ' </div>' + ' <div class="dialog-actions" ng-transclude transclude-from="actions">' + ' </div>' + '</div>' }; }); ``` ``` html <main ng-app="myApp" ng-init="title='My Document'"> <my-dialog title="Save Document"> <div transclude-to="body">Are you sure?</div> <div transclude-to="actions"> <button>Save {{title}}</button> </div> </my-dialog> </main> ``` ## Why multiple transclusion rocks? See how people at [OpenTable](http://www.opentable.com) uses multiple transclusion with angular to create reusable components: - https://www.airpair.com/angularjs/posts/creating-container-components-part-2-angular-1-directives