This post explains how to create custom nested directives in AngularJS application.
Nested Directive means a directive under another directive.
In this example, we will display birthdays of famous people born in a specific month.
<!doctype html> <html> <head> <link href="styles.css" rel="stylesheet" type="text/css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> <script> var app = angular.module("NestedDirectiveExample",[]) app.directive('month',function(){ return{ transclude:true, restrict:'E', scope: { nm: '@' }, template:'<div class="start">'+ '<div class="mtitle">{{nm}}</div>'+ '<div ng-transclude></div>'+ '</div>' } }); app.directive('entry',function(){ return{ restrict:'E', scope: { dt: '@', nm: '@', car:'@' }, template : '<div class="grid">'+ '<div class="grid-left">{{dt}}</div>'+ '<div class="grid-center">{{nm}}</div>'+ '<div class="grid-right">{{car}}</div>'+ '</div>' } }); </script> </head> <body> <H4>Birth Days of famous People</H4> <div ng-app="NestedDirectiveExample"> <month nm="January"> <entry dt="6" nm="Rowan Atkinson" car="Actor"></entry> <entry dt="8" nm="Stephen Hawking" car="Scientist"></entry> <entry dt="11" nm="Rahul Dravid" car="Cricketer"></entry> </month> <month nm="April"> <entry dt="7" nm="Jackie Chan" car="Actor"></entry> <entry dt="24" nm="Sachin Tendulkar" car="Cricketer"></entry> </month> <month nm="December"> <entry dt="18" nm="Steven Spielberg" car="Director"></entry> <entry dt="19" nm="Ricky Ponting" car="Cricketer"></entry> <entry dt="22" nm="Srinivasa Ramanujan" car="Scientist"></entry> </month> </div> </body> </html>
.start{ padding-bottom: 30px; } .mtitle{ padding:10px 0px 10px 15px; width : 600px; font-weight : bold; font-family: Verdana, Geneva, sans-serif; border-top:1px solid #fafafa; border-bottom:1px solid #e0e0e0; background: #008000; color:#ffffff; font-size: 14px; } .grid{ width: 600px; padding:20px 0px 30px 0px; font-weight : bold; font-family: Verdana, Geneva, sans-serif; font-size: 14px; } .grid-left{ width:45px; float:left; padding:10px 0px 10px 0px; background: #3399ff; color:#ffffff; border-radius: 5px; text-align : center; } .grid-center{ width:310px; float:left; padding:10px 0px 10px 15px; border-radius: 2px; margin-left:10px; background: #ff9966; color:#800000; } .grid-right{ width:180px; float:left; padding:10px 0px 10px 15px; margin-left:10px; border-radius: 3px; background: #ff9999; color:#990000; }