AngularJS自定义指令
来源:互联网 发布:印刷开单软件 编辑:程序博客网 时间:2024/05/16 09:09
一.restrict属性:
示例:
<!doctype html><html ng-app="MyModule"><head><meta charset="utf-8"></head><body><hello></hello><div hello></div><div class="hello"></div><!-- directive:hello --></body><script src="framework/angular-1.3.0.14/angular.js"></script><script src="HelloAngular_Directive.js"></script></html>
var myModule = angular.module("MyModule", []);myModule.directive("hello", function() { return { restrict: 'AEMC', template: '<div>Hi everyone!</div>', replace: true }});编译为:
二.replace属性
默认为false,若设置为true,则会移除用户在html中的内容。
<hello> <div>这里是指令内部的内容。</div></hello>
var myModule = angular.module("MyModule", []);myModule.directive("hello", function() { return { restrict:"AE", template:"<div>Hello everyone!</div>", replace:true } });编译为:
三.$templateCache对象:从浏览器缓存中获得html片段
示例:
<hello></hello>
var myModule = angular.module("MyModule", []);//注射器加载完所有模块时,此方法执行一次myModule.run(function($templateCache){$templateCache.put("hello.html","<div>Hello everyone!!!!!!</div>");});myModule.directive("hello", function($templateCache) { return { restrict: 'AECM', template: $templateCache.get("hello.html"), replace: true }});编译结果:
四.templateUrl属性
<hello></hello>
var myModule = angular.module("MyModule", []);myModule.directive("hello", function() { return { restrict: 'AECM', templateUrl: 'hello.html', replace: true }});最后编译的结果为:用户定义的html片段内容。
五.transclude属性
若设置为true,则保留用户在html中定义的内容。
示例:
<hello><div>这里是指令内部的内容。</div></hello>
var myModule = angular.module("MyModule", []);myModule.directive("hello", function() { return { restrict:"AE", transclude:true, template:"<div>Hello everyone!<div ng-transclude></div></div>" } });编译为:
六.directive(指令)与controller(控制器)之间的交互
示例:
<!doctype html><html ng-app="MyModule"><head><meta charset="utf-8"></head><body><div ng-controller="MyCtrl"><loader howToLoad="loadData()">滑动加载</loader></div><div ng-controller="MyCtrl2"><loader howToLoad="loadData2()">滑动加载</loader></div></body><script src="framework/angular-1.3.0.14/angular.js"></script><script src="Directive&Controller.js"></script></html>
var myModule = angular.module("MyModule", []);myModule.controller('MyCtrl', ['$scope', function($scope){$scope.loadData=function(){console.log("加载数据中..."); }}]);myModule.controller('MyCtrl2', ['$scope', function($scope){ $scope.loadData2=function(){ console.log("加载数据中...22222"); }}]);myModule.directive("loader", function() { return { restrict:"AE", link:function(scope,element,attrs){ element.bind('mouseenter', function(event) { //scope.loadData(); // scope.$apply("loadData()"); // 注意这里的坑,howToLoad会被转换成小写的howtoload scope.$apply(attrs.howtoload); }); } } });将鼠标分别移动到元素上得到结果:
七.directive(指令)之间的交互
示例:
<!doctype html><html ng-app="MyModule"><head> <meta charset="utf-8"> <link rel="stylesheet" href="css/bootstrap-3.0.0/css/bootstrap.css"> <script src="framework/angular-1.3.0.14/angular.js"></script> <script src="Directive&Directive.js"></script></head><body><div class="row"><div class="col-md-3"><superman strength>动感超人---力量</superman></div></div><div class="row"><div class="col-md-3"><superman strength speed>动感超人2---力量+敏捷</superman></div></div><div class="row"><div class="col-md-3"><superman strength speed light>动感超人3---力量+敏捷+发光</superman></div></div></body></html>
var myModule = angular.module("MyModule", []);myModule.directive("superman", function() { return { scope: {}, //独立作用域 restrict: 'AE', controller: function($scope) { //暴露共用的属性和方法 $scope.abilities = []; this.addStrength = function() { $scope.abilities.push("strength"); }; this.addSpeed = function() { $scope.abilities.push("speed"); }; this.addLight = function() { $scope.abilities.push("light"); }; }, link: function(scope, element, attrs) { //操作DOM element.addClass('btn btn-primary'); element.bind("mouseenter", function() { console.log(scope.abilities); }); } }});myModule.directive("strength", function() { return { require: '^superman', link: function(scope, element, attrs, supermanCtrl) { supermanCtrl.addStrength(); } }});myModule.directive("speed", function() { return { require: '^superman', link: function(scope, element, attrs, supermanCtrl) { supermanCtrl.addSpeed(); } }});myModule.directive("light", function() { return { require: '^superman', link: function(scope, element, attrs, supermanCtrl) { supermanCtrl.addLight(); } }});将鼠标分别移到相应元素得到结果:
八.独立作用域scope及三种绑定策略
示例1:
<hello></hello><hello></hello><hello></hello><hello></hello>
var myModule = angular.module("MyModule", []);myModule.directive("hello", function() { return { restrict: 'AE', scope:{}, //独立作用域 template: '<div><input type="text" ng-model="userName"/>{{userName}}</div>', replace: true }});
示例2:
<div ng-controller="MyCtrl"><drink flavor="{{ctrlFlavor}}"></drink></div>
var myModule = angular.module("MyModule", []);myModule.controller('MyCtrl', ['$scope', function($scope){$scope.ctrlFlavor="百威";}])myModule.directive("drink", function() { return { restrict:'AE', scope:{ flavor:'@' }, template:"<div>{{flavor}}</div>" // , // link:function(scope,element,attrs){ // scope.flavor=attrs.flavor; // } }});最后结果解析为:
示例3:
<div ng-controller="MyCtrl">Ctrl:<br><input type="text" ng-model="ctrlFlavor"><br>Directive:<br><drink flavor="ctrlFlavor"></drink></div>
var myModule = angular.module("MyModule", []);myModule.controller('MyCtrl', ['$scope', function($scope){$scope.ctrlFlavor="百威";}])myModule.directive("drink", function() { return { restrict:'AE', scope:{ flavor:'=' }, template:'<input type="text" ng-model="flavor"/>' }});解析结果:
示例4:
<div ng-controller="MyCtrl"><greeting greet="sayHello(name)"></greeting><greeting greet="sayHello(name)"></greeting><greeting greet="sayHello(name)"></greeting></div>
var myModule = angular.module("MyModule", []);myModule.controller('MyCtrl', ['$scope', function($scope){$scope.sayHello=function(name){alert("Hello "+name);}}])myModule.directive("greeting", function() { return { restrict:'AE', scope:{ greet:'&' }, template:'<input type="text" ng-model="userName" /><br/>'+ '<button class="btn btn-default" ng-click="greet({name:userName})">Greeting</button><br/>' }});
以上部分内容来自慕课网大漠穷秋老师的视频截图
1 1
- angularJS自定义指令
- AngularJS自定义指令标签
- AngularJS-自定义指令
- angularjs自定义指令
- angularJs自定义指令
- AngularJS自定义指令
- angularjs自定义指令
- angularjs 自定义指令
- AngularJS 自定义指令
- AngularJs自定义指令
- AngularJS自定义指令
- AngularJS 自定义指令详解
- AngularJS自定义指令
- AngularJS自定义指令
- AngularJS自定义指令模板
- angularJS 自定义指令
- angularjs自定义指令
- angularjs自定义指令
- Jquery Ajax调用aspx页面方法
- 42-44组合模式
- Hdu 1068 Girls and Boys【最大匹配】
- 我的收藏集
- Android JSBridge的原理与实现 (prompt和javascript)
- AngularJS自定义指令
- 【杭电oj】1022 - Train Problem I(栈)
- 面试中的C++常见问题
- SharePoint2010 IT Professional - 如何在Site Collection内实现Break Permission Level?
- WebWorker
- 自定义线程池ThreadPoolExecutor
- 有iframe的情况下获取元素
- C/C++冒泡排序,然后二分法搜索寻值
- 2016宏病毒分析及预防报告(1-2月)