在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足你的各种需求的指令。

  本篇文章的参考来自  AngularJS权威指南 ,

  文章中主要介绍指令定义的选项配置

  废话不多说,下面就直接上代码

  1. //angular指令的定义,myDirective ,使用驼峰命名法
  2. angular.module('myApp', [])
  3. .directive('myDirective', function ($timeout, UserDefinedService) {
  4. // 指令操作代码放在这里
  5. });
  6.  
  7. //angular自定义指令 的使用,使用 “-” 来代替驼峰命名法
  8. <div my-directive></div>
  9. 注意:为了避免与未来的HTML标准冲突,给自定义的指令加入前缀来代表自定义的
  10. 命名空间。AngularJS本身已经使用了 ng- 前缀,所以可以选择除此以外的名字。
  11. 在例子中我们使用 my- 前缀(比如 my-derictive
  12.  
  13. 指令的生命周期开始于 $compile 方法并
  14. 结束于 link 方法
  15.  
  16. //自定义指令的全部可设置的属性大致如下
  17. 指令的选项如下所示,每个键的值说明了可以将这个属性设置为何种类型或者什么样的
  18. 函数:
  19. angular.module('myApp', [])
  20. .directive('myDirective', function() { //指令名称myDirective
  21. return { //返回一个对象
  22. restrict: String, //可选字符串参数,可以设置这个指令在DOM中可以何种形式被声明,
  23. //默认为A(attr(当做标签属性来使用))<div my-directive></div>
  24. // 设置为“E”(ele,(直接当做标签来使用)) <my-directive></my-directive>
  25. //C(类名)
  26. //<div class="my-directive:expression;"></div>
  27. //M(注释)
  28. //<--directive:my-directive expression-->
  29. //这些选项可以单独使用,也可以混合在一起使用:
  30. //angular.module('myDirective', function(){
  31. // return {
  32. // restrict: 'EA' // 输入元素或属性
  33. // };
  34. //})
  35.  
  36. priority: Number, //优先级,可忽略,默认为0, ngRepeat的优先级为1000,这样就可以保证在同一元素上,它总是在其他指令之前被调用。
  37. terminal: Boolean,//(布尔型),true或false,如果为false,则这个参数用来告诉AngularJS停止运行当前元素上比本指令优先级低的指令。优先级相同的指令还是会被执行。 ngIf 的优先级略高于 ngView ,
  38. template: String or Template Function: //(字符串或函数)指令中的一个重要的一个属性,必须被设置其中一种
  39. //1, 一段HTML文本;
  40. //2,可以接收两个参数的函数,参数为 tElement 和 tAttrs
  41. //在html模板中必须只有一个根html标签,且如果有换行则需要使用“\”
  42. //例如template: '\
  43. // <div> <-- single root element -->\
  44. // <a href="http://google.com">Click me</a>\
  45. // <h1>When using two elements, wrap them in a parent element</h1>\
  46. // </div>\
  47. //function(tElement, tAttrs) (...},
  48. //更好的选择是使用 templateUrl 参数引用外部模板,参考下面的参数
  49. templateUrl: String, //(字符串或函数)1,外部路径的字符串,2,接受两个参数的函数,参数为 tElement 和 tAttrs ,并返回一个外部HTML文件路径的字符串
  50. //模板加载后,AngularJS会将它默认缓存到 $templateCache 服务中。(可以提前加载模块到缓存中,提高加载速度)
  51. replace: Boolean or String, //(布尔型)默认为false(模板内容会加载到标签内部),true(模板内容会替换当前标签)
  52. scope: Boolean or Object, //(布尔型或对象),默认为false, 设置为true 时,会从父作用域继承并创建一个新的作用域对象。
  53. // ng-controller 的作用,就是从父级作用域继承并创建一个新的子作用域。
  54. //如果要创建一个能够从外部原型继承作用域的指令,将 scope 属性设置为 true
  55. //设置为一个对象,则能设置 隔离作用域, scope 属性设置为一个空对象 {} 。如果这样做了,指令的模板就无法访问外部作用域了:
  56. //例如.directive('myDirective', function() {
  57. // return {
  58. // restrict: 'A',
  59. // scope: {},
  60. // priority: 100,
  61. // template: '<div>Inside myDirective {{ myProperty }}</div>'
  62. // };
  63. // });
  64.  
  65. //在scope对象中,还可以使用“@” “=” “&”,来设置模板中数据的作用域和绑定规则
  66. //"@" 本地作用域属性:使用当前指令中的数据和DOM属性的值进行绑定
  67. //“=” 双向绑定:本地作用域上的属性同父级作用域上的属性进行双向的数据绑定。
  68. //“&” 父级作用域绑定:通过 & 符号可以对父级作用域进行绑定
  69. //例如
  70. //scope: {
  71. // ngModel: '=', // 将ngModel同指定对象绑定
  72. // onSend: '&', // 将引用传递给这个方法
  73. // fromName: '@' // 储存与fromName相关联的字符串
  74. //}
  75.  
  76. transclude: Boolean, //默认为false.只有当你希望创建一个可以包含任意内容的指令时, 才使用 transclude: true 。
  77. //如果指令使用了 transclude 参数,那么在控制器(下面马上会介绍)中就无法正常监听数
  78. //据模型的变化了。
  79. controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, //(字符串或函数)注册在应用中的控制器的构造函数
  80. //使用函数创建内联控制器,例如
  81. //angular.module('myApp',[])
  82. // .directive('myDirective', function() {
  83. // restrict: 'A',
  84. // controller:
  85. / function($scope, $element, $attrs, $transclude) {
  86. // // 控制器逻辑放在这里
  87. // }
  88. //})
  89.  
  90. controllerAs: String, //可以在指令中创建匿名控制器,例如
  91. //.directive('myDirective', function() {
  92. // return {
  93. // restrict: 'A',
  94. // template: '<h4>{{ myController.msg }}</h4>',
  95. // controllerAs: 'myController',
  96. // controller: function() {
  97. // this.msg = "Hello World"
  98. // }
  99. // };
  100. //});
  101.  
  102. require: String, //(字符串或数组)字符串代表另外一个指令的名字,如果没有前缀,指令将会在自身所提供的控制器中进行查找,如果没有找到任何控制器(或
  103. //具有指定名字的指令)就抛出一个错误。
  104. //例如
  105. //如果不使用 ^ 前缀,指令只会在自身的元素上查找控制器。
  106. //require: 'ngModel'
  107. // 使用 ? 如果在当前指令中没有找到所需要的控制器,会将 null 作为传给 link 函数的第四个参数
  108. //require: '?ngModel'
  109. //使用 ^ 如果添加了 ^ 前缀,指令会在上游的指令链中查找 require 参数所指定的控制器。
  110. //require: '^ngModel'
  111. // 使用 ^? 将前面两个选项的行为组合起来,我们可选择地加载需要的指令并在父指令链中进行查找。
  112. //require: '^?ngModel',
  113.  
  114. link: function(scope, iElement, iAttrs) { ... }, //compile 选项本身并不会被频繁使用,但是 link 函数则会被经常使用。
  115. //当我们设置了 link 选项, 实际上是创建了一个 postLink() 链接函数, 以便 compile() 函数可以定义链接函数。
  116. //compile 和 link 选项是互斥的。如果同时设置了这两个选项,那么会把 compile
  117. //所返回的函数当作链接函数,而 link 选项本身则会被忽略。
  118. //通常情况下,如果设置了 compile 函数,说明我们希望在指令和实时数据被放到DOM中之前
  119. //进行DOM操作,在这个函数中进行诸如添加和删除节点等DOM操作是安全的。
  120. //用 link 函数创建可以操作DOM的指令。
  121. //require 'SomeController',
  122. //link: function(scope, element, attrs, SomeController) {
  123. // 在这里操作DOM,可以访问required指定的控制器
  124. //}
  125. compile: function(tElement, tAttrs, transclude) {
  126. return {
  127. pre: function(scope, iElement, iAttrs, controller) { ... },
  128. post: function(scope, iElement, iAttrs, controller) { ... }
  129. }
  130. // 或者
  131. return function postLink(...) { ... }
  132. }
  133. };
  134. });

angular指令的详解就到这,如果想了解跟多请移步  angular官网https://docs.angularjs.org/

angular 自定义指令详解 Directive的更多相关文章

  1. angular自定义指令详解

    指令(directive)是angular里面最核心也是最难懂的东西,在慕课网看了下大漠穷秋老湿的视频,自己百度半天做了一些小test,总算把一切都搞明白了. 先列出学习来源: 指令中controll ...

  2. day3 自定义指令详解

    在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足 ...

  3. AngularJs自定义指令详解(6) - controller、require

    在前面文章中提到一旦声明了require,则链接函数具有第四个参数:controller. 可见require和controller是配合使用的. 在自定义指令中使用controller,目的往往是要 ...

  4. AngularJs自定义指令详解(1) - restrict

    下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...

  5. vue.js自定义指令详解

    写在文本前:相信在做vue的项目,你肯定接触了指令,我们常用vue内置的一些指令,比如v-model,v-text,v-if,v-show等等,但是这些内置指令不在本文的讲解范畴,本文想说的是其自定义 ...

  6. Vue.js 源码分析(二十四) 高级应用 自定义指令详解

    除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上 ...

  7. angularjs Directive自定义指令详解

    作用:需要用Directive有下面的情景: 1.使你的Html更具语义化,不需要深入研究代码和逻辑即可知道页面的大致逻辑. 2. 抽象一个自定义组件,在其他地方进行重用. 3.使用公共代码,减少重复 ...

  8. AngularJs自定义指令详解(5) - link

    在指令中操作DOM,我们需要link参数,这参数要求声明一个函数,称之为链接函数. 写法: link: function(scope, element, attrs) { // 在这里操作DOM} 如 ...

  9. AngularJs自定义指令详解(10) - 执行次序

    代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...

随机推荐

  1. Windows7 中常用的一些DOS命令总结

    Windows7 中常用的一些DOS命令总结... ----------------------- -------------------------------------------- dos,是 ...

  2. C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)

    阅读目录 背景 TiDB是什么 环境部署 实战 性能测试 结语 一.背景 在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/co ...

  3. 使用webpack热加载,开发多页面web应用

    我们一般使用webpack热加载开发SPA应用,但工作中难免会遇到一些多页面的demo或项目. 故参考 kingvid-chan 的代码,搭了一个使用HRM开发多页面web应用的脚手架,刚好也进一步学 ...

  4. HttpResponseMessage获取请求响应体内容

    问题描述 使用httpClient获取的HttpResponseMessage类型的response,直接对其toString()获取的是请求的响应头,并没有获取响应体的内容 解决办法 HttpRes ...

  5. 转每天一个linux命令(4):mkdir命令

    linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令 ...

  6. jQuery圣诞雪花

    <script type="text/javascript"> $(function(){ var d="<div class='y_snow'> ...

  7. [Caffe]使用经验积累

    Caffe使用经验积累 本贴记录Caffe编译好了,使用过程的常用命令与常见错误解决方式.如果对编译过程还存在问题,请参考史上最全的caffe安装过程配置Caffe环境. 1 使用方法 训练网络 xx ...

  8. h5 测试关注点

    原文链接:http://www.blogjava.net/qileilove/archive/2014/07/24/416154.html?utm_source=tuicool&utm_med ...

  9. kindeditor上传图片时候,上传成功了,但是页面上却提示失败

    今天尝试着kindeditor做一个上传demo,碰到了一个日狗的问题,百度谷歌都没有答案,最后查看源码才发现问题所在,记录一下,福利大众. 碰到问题如下,图片后台明明上传成功了,返回信息也是正确的, ...

  10. chrome开发工具指南(三)

    Security 面板 使用 Security Overview 可以立即查看当前页面是否安全. 检查各个源以查看连接和证书详情(安全源)或找出具体哪些请求未受保护(非安全源). Security O ...