全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular的自定义指令以及实例

前面的文章介绍了很多angular自带的指令,下面我们看看如何使用directive自定义指令。

先看一个例子:

<body>
 <div my-hello></div>
</body>
<script type="text/javascript">
var m1 = angular.module('myApp',[]);
m1.directive('myHello',function(){
 return {
 restrict : 'A',
 replace : true,
 template : '<div>hello angular</div>'
 };
});
</script>

1:我们定义了一个my-hello的指令。

2:使用directive完善这个指令,返回一个对象。有三个值:

   a) :restrict共四个值:E:标签指令,C:class指令,M:注释指令,A:属性指令

    如何使用 ?

   b):replace是否替换(M注释必须为true才能解析)看图:

    true:

    false:

     c):template内容,除此之外还有templateUrl,指定一个html模板文件。

下面再举个例子:

 <div ng-controller="Aaa">
 <div my-tab my-id="div1" my-name="name" my-fn="show(num)" class="J-tab"></div>
 <div my-tab my-id="div2" my-name="name" my-fn="show(num)" class="J-tab"></div>
</div>
<script type="text/javascript">
var m1 = angular.module('myApp',[]);
m1.controller('Aaa',['$scope',function($scope){
 $scope.name = 'xiecg';
 $scope.age = 18;
 $scope.show = function(num){
 console.log(num);
 };
}]);
m1.directive('myTab',function(){
 return {
 restrict : 'ECMA',
 replace : true, //替换的方式插入内容//绑定策略
 scope : {
  myId : '@', //解析普通字符串
  myName : '=', //解析数据
  myFn : '&' //函数
 },
 controller : ['$scope',function($scope){
  //共享数据存放在这里
  $scope.name = 'this is a xiecg';
 }],
 template : '<div id="{{myId}}">\
   <input type="button" value="1" class="active" ng-click="myFn({num:456})">\
   <input type="button" value="2">\
   <input type="button" value="3">\
   <div style="display:block;">{{myName}}</div>\
   <div>2222</div>\
   <div>3333</div>\
  </div>'
 };
});
</script>

1:scope默认是false,为true表示独立作用域。

2:scope给予一个对象时,表示执行绑定策略,在template上调用这些数据。

  a):我们在DOM元素上my-id,我们使用@符号,表示解析普通字符串,说白了就是你写什麽就是什麽。

  b):使用=符号,表示解析数据。

  c):使用&符号,表示这绑定一个函数。

3:controller,表示绑定指令内部使用的数据。

好,下面来继续完善这个tab切换的例子!

完整代码:

<!DOCTYPE HTML>
<html ng-app="myApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Tab选项卡实例</title>
<style type="text/css">
 .J-tab .active{background-color:#03A9F4;}
 .J-tab div{display:none;}
</style>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
</head>
<body>
<div ng-controller="Aaa">
 <my-tab my-id="div1" my-data="sports" class="J-tab"></my-tab>
 <my-tab my-id="div2" my-data="time" class="J-tab"></my-tab>
</div>
<script type="text/javascript">
var m1 = angular.module('myApp',[]);
m1.controller('Aaa',['$scope',function($scope){
 $scope.sports = [
 {title : '篮球',content : '111111111'},
 {title : '足球',content : '222222222'},
 {title : '排球',content : '333333333'}
 ];
 $scope.time = [
 {title : '上午',content : '444444444'},
 {title : '中午',content : '555555555'}
 ];
}]);
m1.directive('myTab',function(){
 return {
 restrict : 'E',
 replace : true,
 scope : {
  myId : '@',
  myData : '='
 },
 controller : ['$scope',function($scope){
  $scope.name = 'this is a xiecg';
 }],
 template : '<div id="{{myId}}">\
   <input ng-repeat="data in myData" type="button" ng-value="data.title" ng-class="{active:$first}">\
   <div ng-repeat="data in myData" ng-style="{display:$first?\'block\':\'none\'}">{{data.content}}</div>\
  </div>',
 link : function(scope,element,attr){
  element.on('click','input',function(){
  var self = $(this) , i = self.index();
  self.addClass('active').siblings('input').removeClass('active');
  self.siblings('div').eq(i).show().siblings('div').hide();
  });
 }
 };
});
</script>
</body>
</html>

link属性,表示当directive被angular编译后,执行该方法。这个方法接受三个参数,

a):scope表示controller下面的数据。

b):element表示当前的DOM元素。

c):attr表示这个DOM元素上的自定义属性。

补充:

在实际的开发过程中我们往往需要嵌套各种组件和指令。下面来介绍directive中的transclude和require。

<!DOCTYPE HTML>
<html ng-app="myApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>自定义指令间的互相交互</title>
<script type="text/javascript" src="js/angular.min.js"></script>
</head>
<body>
<div>
 <hello>
 <hi></hi>
 </hello>
</div>
<script type="text/javascript">
var m1 = angular.module('myApp',[]);
m1.directive('hello',function(){
 return {
 restrict : 'E',
 replace : true,
 transclude : true, //允许自定义指令的嵌套,通过ng-transclude指定嵌套的范围
 controller : function($scope){
  $scope.name = 'xiecg';
  this.name = 'xiecg'; //使用this共享给其他指令
 },
 template : '<div>hello angular <h1 ng-transclude></h1></div>'
 };
});
m1.directive('hi',function(){
 return {
 restrict : 'E',
 replace : true,
 require : '^hello',//hello指令属性hi指令的父级,需要用^符号指定。如果无法指定,使用?容错处理。
 template : '<span>hi angular {{name}}</span>',
 link : function(scope,element,attr,reController){
  console.log(reController); //得到父级hello指令中共享出来的数据
 }
 };
});
</script>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# Angular  # 自定义指令  # Angular.js自定义指令学习笔记实例  # Angularjs自定义指令实现三级联动 选择地理位置  # 详解angular2采用自定义指令(Directive)方式加载jquery插件  # AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法  # AngularJS创建自定义指令的方法详解  # angularjs 表单密码验证自定义指令实现代码  # AngularJS使用自定义指令替代ng-repeat的方法  # AngularJS 自定义指令详解及实例代码  # 深入讲解AngularJS中的自定义指令的使用  # 详解AngularJS中自定义指令的使用  # Angular1.x自定义指令实例详解  # 自定义  # 绑定  # 如何使用  # 在这里  # 自带  # 说白了  # 先看  # 看图  # 需要用  # 选项卡  # 你写  # 过程中  # 举个例子  # 中午  # 上午  # 一个函数  # 在实际  # fn  # id  # html 


相关文章: 建站主机服务器选型指南与性能优化方案解析  如何通过可视化优化提升建站效果?  表情包在线制作网站免费,表情包怎么弄?  招贴海报怎么做,什么是海报招贴?  再谈Python中的字符串与字符编码(推荐)  建站OpenVZ教程与优化策略:配置指南与性能提升  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  高防服务器租用如何选择配置与防御等级?  建站主机与服务器功能差异如何区分?  如何快速生成ASP一键建站模板并优化安全性?  建站主机选虚拟主机还是云服务器更好?  如何用y主机助手快速搭建网站?  如何通过云梦建站系统实现SEO快速优化?  如何在腾讯云服务器快速搭建个人网站?  如何快速完成中国万网建站详细流程?  建站之星安装后如何自定义网站颜色与字体?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  建站主机解析:虚拟主机配置与服务器选择指南  如何用免费手机建站系统零基础打造专业网站?  如何批量查询域名的建站时间记录?  如何在宝塔面板中修改默认建站目录?  建站10G流量真的够用吗?如何应对访问高峰?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何在IIS7上新建站点并设置安全权限?  宝塔Windows建站如何避免显示默认IIS页面?  如何快速搭建安全的FTP站点?  定制建站哪家更专业可靠?推荐榜单揭晓  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  行程制作网站有哪些,第三方机票电子行程单怎么开?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何在自有机房高效搭建专业网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  图册素材网站设计制作软件,图册的导出方式有几种?  建站主机选购指南:核心配置优化与品牌推荐方案  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何自定义建站之星模板颜色并下载新样式?  建站之星收费标准详解:套餐费用及年费价格表一览  韩国服务器如何优化跨境访问实现高效连接?  c# 服务器GC和工作站GC的区别和设置  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  网站制作多少钱一个,建一个论坛网站大约需要多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。