原贴地址

1,tansclude: 是指令能够能够把外部定义的内容传回指令模板内部(通过在内部标签使用ng-transclude)。这个外部指定的内容是根据外部的作用域控制的,跟指令的作用域无关。这个跟指令的模版解析是不一样的,指令模板解析的思路是模板-指令定义作用域名-外部作用域或者模板-指令定义作用域名-元素属性-外部作用域。当想要把任意内容引入到指令中时就需要开启这个功能。

2, '&'绑定: &绑定使我们可以在指令的作用中调用传递的函数,但是运行在注册时候定义的作用域上下文。绑定的方式实质是开放一个函数给孤立作用域,使孤立作用域可以调用外部的函数。

3, requre中一些符号好: '^'表示在父元素中寻找匹配的指令,如果没有的话则会报错; 如果没有'^',表示会在本身的元素上寻找这个指令; ‘?’ 表示找不到的话,不会报错。从这里可以看出require只能寻找本身和父元素上的指令,而不能作用到兄弟元素上面。找到requre定义的指令之后,该指令上定义的控制器实例就可以通过link函数的第四个参数来获取到,注意是控制器实例,所以能访问到的是该控制器上用this定义的属性和方法。

4, 指令上controller跟link的区别: 这两个都可以获取到作用域,元素,属性等引用,也都会执行一次,他们的基本区别是,控制器可以暴露一个API,而link可以通过require与其他的指令控制器交互。所以如果要开放出一个API给其他指令用就写在controller中,否则写在link中。

5, normalization: 在匹配指令的时候,angular会规范化收集的元素和属性的名字,然后再与定义的指令名字相匹配,主要过程有: 1)去掉元素或属性上面的x-和data-的前缀; 2)转化':','-'和‘_-’形式的命名为驼峰式拼写。虽然可以有多种拼写方式,但是推荐使用ng-bind或者data-ng-bind这种写法,其他的写法是因历史遗留原因而存在。

6, ng使用$compile服务搜索element name,attribute,class name和comment来匹配指令,推荐优先使用element name 和 attribute name 来匹配,这样更容易匹配(更容易理解?还是内部有优化?)。comment方法常用来某些DOM API 限制的一些场景下,比如说table元素不能嵌套使用,所以在重写table元素功能的时候,就要通过comment方式引入。

7, ng使用$interpolate服务来处理文本和属性值,以便查找里面是否含有内嵌的表达式。浏览器对合法的属性值是有限制的,由于DOM API的限制,某些情况下使用cx='xxx';会报错,因此可以通过改用ng-attr-cx="xxx"来避开这个限制。

8, 指令名使用属性还是元素,当你创建的指令作为一个组件(拥有自己的模板之类的东西)时使用元素,当你的指令指向为已有的指令装饰新功能,添加新行为的话就使用属性。

9, isolate scope的作用: 如果没有isolate scope,指令使用的作用域会自动继承父元素的作用域,这样子每次使用指令都需要手工去创建一个控制器供指令使用, 这是非常麻烦的。isolate scope 是指令的作用域与外部作用域分离,同时isolate scope又可以通过特定的语法映射外部的作用域到指令作用域。

10, ng会触发一些特殊的事件,比如说当编译过的DOM被移除掉的时候,会触发$destory事件,当某个作用域被移除的时候,会触发$destory事件向下广播。默认的注册在元素或作用域上的监听器在元素或作用域被移除的时候自动移除。注册在服务上的监听器需要手工移除(例子?)

11, 指令中需要用到的表达式解析: 假设解析这段指令my name is {{name}}。首先是指令内部模板的解析,是利用指令的scope,如果没有定义这个选项,会自动继承外部的作用域。然后指令上的任何属性都会被指令收集到,所以这个customer也会被收集到,如果在scope上有定义属性的值包含customer,那么这个customer会被链接到。再有一个,就是customer的属性值name,这个是被父作用域解析的,与指令无关。最后,指令内部的内容{{name}},假如你什么都不做,在指令的中添加一段内容,这段内容会自动的被指令的模板替换掉,如果使用ng-transclude那么会被引用到模板中,而且根据外部的作用域来解析这段内容。

angular的directive笔记的更多相关文章

  1. Angular快速学习笔记(2) -- 架构

    0. angular 与angular js angular 1.0 google改名为Angular js 新版本的,2.0以上的,继续叫angular,但是除了名字还叫angular,已经是一个全 ...

  2. [Angular 2] Directive intro and exportAs

    First, What is directive, what is the difference between component and directive. For my understandi ...

  3. 关于angular 自定义directive

    关于angular 自定义directive的小结 首先我们创建一个名为"expander"的自定义directive指令: angular.module("myApp& ...

  4. Angular源代码学习笔记-原创

    时间:2014年12月15日 14:15:10 /** * @license AngularJS v1.3.0-beta.15 * (c) 2010-2014 Google, Inc. http:// ...

  5. Angular快速学习笔记(3) -- 组件与模板

    1. 显示数据 在 Angular 中最典型的数据显示方式,就是把 HTML 模板中的控件绑定到 Angular 组件的属性. 使用插值表达式显示组件属性 要显示组件的属性,最简单的方式就是通过插值表 ...

  6. Angular 快速学习笔记(1) -- 官方示例要点

    创建组件 ng generate component heroes {{ hero.name }} {{}}语法绑定数据 管道pipe 格式化数据 <h2>{{ hero.name | u ...

  7. [Angular] Custom directive Form validator

    Create a directive to check no special characters allowed: import {Directive, forwardRef} from '@ang ...

  8. [Angular] Test Directive

    directive: import { Directive, HostListener, HostBinding, ElementRef } from '@angular/core'; @Direct ...

  9. [Angular] Export directive functionalities by using 'exportAs'

    Directive ables to change component behaives and lookings. Directive can also export some APIs which ...

随机推荐

  1. java生成随机序列号

    1.java生成随机序列号 String deleteUuid = UUID.randomUUID().toString(); 引用Jar包 //java-uuid-generator-3.1.3.j ...

  2. delete-node-in-a-bst

    https://leetcode.com/problems/delete-node-in-a-bst/ /** * Definition for a binary tree node. * struc ...

  3. ImageView 设置图片

      android doc中是这样描述的: public void setImageResource (int resId) 这是其中的一个方法,参数resld是这样: ImageView.setIm ...

  4. css3 切换贞动画的效果,仿gif效果

    /*---第一组动画---*/ .cartonGif_1{ position: absolute; display: block; background:url("img/haihangzh ...

  5. java-过滤器-监听器-拦截器

    1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml ...

  6. jQuery 实现Bootstrap Chart 图表

    很多时候我们制作报表的时候需要图表,如果你使用bootstrap开发你的网站,如果你需要使用图表,那么最简单的方法就是就是使用bootstrap 的chart.js来实现图表,下面介绍方法 1.引入c ...

  7. php5.2转向 PHP 5.3 的 PHP 开发

    PHP 5.3 开始,为了更好的向 PHP 的未来版本(PHP6) 过渡,将未来不再支持的函数标记为 DEPRECATED.在代码中使用这些函数,将毫不留情的在页面中显示警告信息:“使用了过时的函数… ...

  8. windowsphone8.0 iso 下载地址

    中文版http://download.microsoft.com/download/F/5/6/F56AD199-EF12-43C7-8551-C095394D3B32/fulltril30/iso/ ...

  9. 开发环境配置(netbeans+ant迁移到eclipse+maven)

    新公司入职,接手一个离职人员的项目,拿到的源码是以一个压缩包,用netbeans开发,ant管理:前端:jsp+extjs,后端:springmvc+hibernate+activiti+spring ...

  10. 二级指针的作用及用途 .xml

    pre{ line-height:1; color:#9f1d66; background-color:#e1e1e1; font-size:16px;}.sysFunc{color:#5d57ff; ...