一些用于定义行为的指令,可能不需要使用template参数。
当指定template参数时,其值可以是一个字符串,表示一段HTML文本,也可以是一个函数,这函数接受两个参数:tElement和tAttrs。
前者用的较为普遍,而且也好理解。后者暂不理会。
下面是一个例子,在模板中使用rootScope里定义的变量:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <script src="../lib/angular-1.3.16/angular.min.js"></script> <script src=""></script> <title></title> <script language="JavaScript"> angular.module('app',[]) .run(function($rootScope){ $rootScope.greeting = 'World'; }) .directive('myDirective',function(){ return{ template:'Hello {{greeting}}!' }; }); </script> </head> <body ng-app="app"> <div my-directive></div> </body> </html>
审查元素看看:
果然,在解析指令里的greeting变量时,AngularJs会跑到$rootScope里找。
那么,加个控制器试试看:
angular.module('app',[]) .run(function($rootScope){ $rootScope.greeting = 'World'; }) .controller('myController',function($scope){ $scope.greeting = 'AngularJs'; }) .directive('myDirective',function(){ return{ template:'Hello {{greeting}}!' }; });
别忘了:
<div ng-controller="myController" my-directive></div>
在浏览器中查看,输出的是:
Hello AngularJs!
可见指令使用的是控制器创建的子作用域$scope