AngularJS  自定义指令详解及实例代码


Posted in Javascript onSeptember 14, 2016

AngularJS支持用户自定义标签属性,在不需要使用DOM节点操作的情况下,添加自定义的内容。

前面提到AngularJS的四大特性:

1 MVC

2 模块化

3 指令

4 双向数据绑定

下面将会介绍如下的内容:

1 如何自定义指令

2 自定义指令的使用

3 自定义指令的内嵌使用

如何自定义指令:

Angular是基于模块的框架,因此上来肯定要创建一个自己的模块:

var myAppModule = angular.module("myApp",[]);

然后在此模块基础上创建指令directive      

myAppModule.directive("xingoo",function(){
    return{
     restrict:'AECM',
     template:'<div>hello my directive</div>',
     repalce:true
    }
   });

其中,xingoo是我们自定义标签的名字,后面跟着它的方法函数。

函数return了一个键值对组合,其中定义了标签的使用方法、属性等等内容。

那么看看它都定义了哪些内容吧:

1 restrict:定义了标签的使用方法,一共四种,分别是AECM

2 template:定义标签的模板。里面是用于替换自定义标签的字符串

3 repalce:是否支持替换

4 transclude:是否支持内嵌

如何使用指令:

上面提到了标签的四种使用方法,即AECM。

A attribute属性:当做属性来使用

<div xingoo></div>

E element元素:当做标签元素来使用

<xingoo></xingoo>

C class类:当做CSS样式来使用

<div class="xingoo"></div>

M comments注释:当做注释使用(这种方式在1.2版本下亲测不可用!)

<!-- directive:xingoo -->
<div></div>

一般来说推荐,当做属性和元素来使用。

当想要在现有的html标签上扩展属性时,采用属性的方式。

当想要自定义标签时,采用标签的形式。

想要使用那种方式,必须要在定义directive中的restrict里面声明对应的字母。 

指令的内嵌使用:

因为标签内部可以嵌套其他的标签,因此想要在自定义标签中嵌套其他的元素标签,则需要:

1 使用transclude属性,设置为true。

2 并使用ng-transclude属性,定义内部嵌套的位置。

代码如下:      

myAppModule.directive("test",function(){
    return{
     restrict:'AECM',
     transclude:true,
     template:"<div>haha! <div ng-transclude></div> wuwu!</div>"
    }
   });
 

全部代码

<!doctype html>
<html ng-app="myApp">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script>
 </head>
 <body>
  
  <xingoo></xingoo>
  <div xingoo></div>
  <div class="xingoo"></div>
  <!-- directive:xingoo -->
  <div></div>
  <hr>
  <xingoo>3333</xingoo>
  <hr>
  <test>4444</test>


  <script type="text/javascript">
   var myAppModule = angular.module("myApp",[]);

   myAppModule.directive("xingoo",function(){
    return{
     restrict:'AECM',
     template:'<div>hello my directive</div>',
     repalce:true
    }
   });

   myAppModule.directive("test",function(){
    return{
     restrict:'AECM',
     transclude:true,
     template:"<div>haha! <div ng-transclude></div> wuwu!</div>"
    }
   });
  </script>
 </body>
</html>

运行结果

AngularJS  自定义指令详解及实例代码

以上就是对AngularJS 自定义指令的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
js有关元素内容操作小结
Dec 20 Javascript
JQuery for与each性能比较分析
May 14 Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
underscore之Collections_动力节点Java学院整理
Jul 10 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
深入浅析JS中的严格模式
Jun 04 Javascript
JS根据json数组多个字段排序及json数组常用操作
Jun 06 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
VUE实现Studio管理后台之鼠标拖放改变窗口大小
Mar 04 Javascript
AngularJS 自定义过滤器详解及实例代码
Sep 14 #Javascript
AngularJS 中的Promise --- $q服务详解
Sep 14 #Javascript
AngularJS bootstrap启动详解及实例代码
Sep 14 #Javascript
AngularJS equal比较对象实例详解
Sep 14 #Javascript
AngularJS API之copy深拷贝详解及实例
Sep 14 #Javascript
AngularJS $injector 依赖注入详解
Sep 14 #Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 #Javascript
You might like
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
看了就知道什么是JSON
2007/12/09 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
javascript 打印页面代码
2009/03/24 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
python读取文件名并改名字的实例
2019/01/07 Python
django ajax发送post请求的两种方法
2020/01/05 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
工作过失检讨书
2014/02/23 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
python实现自动化群控的步骤
2021/04/11 Python
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS