"控制器应该尽可能保持短小精悍,而在控制器中进行DOM操作和数据操作则是一个不好的实践。"
"设计良好的应用会将复杂的逻辑放到指令和服务中。通过使用指令和服务,我们可以将控制器重构成一个轻量且更易维护的形式"
《AngularJs权威教程》
<body ng-app="myApp"> <my-student></my-student> <script type="text/javascript"> var app = angular.module('myApp',[]); app.directive("myStudent",function(){ return { restrict:"EA",template:"Hello Directive" } }) </script> </body>
<my-student></my-student>
<div my-student></div>
<div class="my-student"></div>
<!-- directive:my-student -->
template:'<div><p>{{name}}</p></div>' app.directive("myStudent",template:"<div><p>{{name}}</p></div>",controller:function($scope){ $scope.name="CONST_Q" } } })
<!-- child1.html--> <div> <p>您好 {{name}}</p> </div>
app.directive("myStudent",templateUrl:"child1.html",controller:function($scope){ $scope.name="CONST_Q" } } })
<body ng-app="myApp"> <div ng-controller="myCtrl"> <p>Hello {{name}}</p> </div> <my-student></my-student> <script type="text/javascript"> var app = angular.module('myApp',[]); app.controller("myCtrl",function($scope){ $scope.name = "XiaoMing" }) app.directive("myStudent",controller:function($scope){ $scope.name="小明" } } }) </script> </body>
app.directive("myStudent",controller:'myCtrl' } })
<!-- child1.html--> <div> <p>您好 {{name2}}</p> <button ng-click="updateName2()">修改用户名</button> </div>
<!--directive1.html--> <!DOCTYPE html> <html lang="en"> <head> <Meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../../lib/angular-1.4.1/angular.min.js"></script> </head> <body ng-app="myApp" ng-controller="myCtrl"> <div style="background-color: burlywood"> <p>Hello {{name1}}</p> <button ng-click="updateName1()">Update Name</button> </div> <div my-student name3="{{name1}}"></div> <script type="text/javascript"> var app = angular.module('myApp',function($scope){ $scope.name1 = "XiaoMing"; var i=1; $scope.updateName1 = function(){ $scope.name1 = $scope.name1 + (i++); } }) app.directive("myStudent",scope:{ name2:'@name3' },controller:function($scope){ var i=1; $scope.updateName2 = function(){ $scope.name2 = $scope.name2 + (i++); } } } }) </script> </body> </html>
<div my-student name3="name1"></div>
scope:{ name2:'=name3' },
<!-- child1.html--> <div> <p>您好 {{name2}}</p> <button ng-click="updateName2()">修改用户名</button> </div>
<!--directive1.html--> <!DOCTYPE html> <html lang="en"> <head> <Meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../../lib/angular-1.4.1/angular.min.js"></script> </head> <body ng-app="myApp" ng-controller="myCtrl"> <div style="background-color: burlywood"> <p>Hello {{name1}}</p> <button ng-click="updateName1()">Update Name</button> </div> <div my-student name3="name1" update-name3="updateName1()"></div> <script type="text/javascript"> var app = angular.module('myApp',scope:{ name2:'=name3',updateName2:'&updateName3' } } }) </script> </body> </html>
<!-- child1.html--> <div> <p>您好 {{name2}}</p> <button ng-click="updateName2({name4:name2})">修改用户名</button> </div>
<body ng-app="myApp" ng-controller="myCtrl"> <div style="background-color: burlywood"> <p>Hello {{name1}}</p> <button ng-click="updateName1({name4:name1})">Update Name</button> </div> <div my-student name3="name1" update-name3="updateName1({name4:name1})"></div> <script type="text/javascript"> var app = angular.module('myApp',function($scope){ $scope.name1 = "XiaoMing"; var i=1; $scope.updateName1 = function(name){ $scope.name1 = name.name4 + (i++); console.log(name) } }) app.directive("myStudent",updateName2:'&updateName3' } } }) </script> </body>
<!DOCTYPE html> <html lang="en"> <head> <Meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../../lib/angular-1.4.1/angular.js"> </script> </head> <body ng-app="myApp" ng-controller="myCtrl"> <div> <my-student> </my-student> </div> <script> var app = angular.module("myApp",[]); app.controller("myCtrl",function($scope){ $scope.stu = { name:'张三',age:20 } $scope.ageAdd = function(){ $scope.stu.age+=1; } $scope.ageCut = function(){ $scope.stu.age-=1; } }) app.directive("myStudent",function () { return { restrict: 'EA',template: '<div><ng-transclude age-add></ng-transclude>姓名:{{stu.name}} 年龄:{{stu.age}}<ng-transclude class="age-cut"></ng-transclude></div>',replace:true,transclude:true } }) app.directive("ageAdd",function(){ return { restrict:"EAC",template:'<button ng-click="ageAdd()">年龄自增</button>' } }) app.directive("ageCut",template:'<button ng-click="ageCut()">年龄自减</button>' } }) </script> </body> </html>
注:如有写的不好的地方,望指出,相互学习