angular的directive笔记
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笔记的更多相关文章
- Angular快速学习笔记(2) -- 架构
0. angular 与angular js angular 1.0 google改名为Angular js 新版本的,2.0以上的,继续叫angular,但是除了名字还叫angular,已经是一个全 ...
- [Angular 2] Directive intro and exportAs
First, What is directive, what is the difference between component and directive. For my understandi ...
- 关于angular 自定义directive
关于angular 自定义directive的小结 首先我们创建一个名为"expander"的自定义directive指令: angular.module("myApp& ...
- Angular源代码学习笔记-原创
时间:2014年12月15日 14:15:10 /** * @license AngularJS v1.3.0-beta.15 * (c) 2010-2014 Google, Inc. http:// ...
- Angular快速学习笔记(3) -- 组件与模板
1. 显示数据 在 Angular 中最典型的数据显示方式,就是把 HTML 模板中的控件绑定到 Angular 组件的属性. 使用插值表达式显示组件属性 要显示组件的属性,最简单的方式就是通过插值表 ...
- Angular 快速学习笔记(1) -- 官方示例要点
创建组件 ng generate component heroes {{ hero.name }} {{}}语法绑定数据 管道pipe 格式化数据 <h2>{{ hero.name | u ...
- [Angular] Custom directive Form validator
Create a directive to check no special characters allowed: import {Directive, forwardRef} from '@ang ...
- [Angular] Test Directive
directive: import { Directive, HostListener, HostBinding, ElementRef } from '@angular/core'; @Direct ...
- [Angular] Export directive functionalities by using 'exportAs'
Directive ables to change component behaives and lookings. Directive can also export some APIs which ...
随机推荐
- HTML5中的localStorage用法
存储数据的方法就是直接给window.localStorage添加一个属性,例如:window.localStorage.name 或者 window.localStorage["name& ...
- 【开发必备】吐血推荐珍藏的Chrome插件
[开发必备]吐血推荐珍藏的Chrome插件 一:(Lying人生感悟.可忽略) 青春浪漫,往往难敌事故变迁.生命对每一个人都是平等的,彼此所经历的那就一定是彼此所必须经历的,它一定不是只为了折磨.消耗 ...
- Eclipse附加项目中的某个jar包的源码
1.这里以web项目为例,打开项目应用的jar包:如下图 2.在想要引入源码的jar包上右键>属性(Properties)
- android studio sqlite操作代码片段
SQLiteDatabase db;Cursor cur; SimpleCursorAdapter adapter; // 打开或创建数据库db = openOrCreateDatabase(DB ...
- [转]C#中的?和??
原文链接:http://msdn.microsoft.com/zh-tw/library/2cf62fcy%28VS.80%29.aspx 使用可為 Null 的型別 (C# 程式設計手冊) Visu ...
- Android之Notification的多种用法(转)
我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也 ...
- dede 首页调用单页->栏目内容
{dede:sql sql='Select content from dede_arctype where id=47'} [field:content/] {/dede:sql}
- 初识jQuery 2013-09-26
常用选择器 $("#bad") id选择器 $("div#bad") id为bad 并且必须是div的元素 $("[href]") ...
- JVM——类的加载过程
附一张图方便理解,一个类的执行过程 类的加载过程,简明的来说 类装饰器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件.在Java中,类装载器把一个类装入JVM中,要经过以下步骤: 装载:查 ...
- 使用Rxjava缓存请求
最近,我尝试使用RxJava开发了一款闲时备份app.我必须承认,一旦你get到了正确的方式,RxJava几乎感觉就像作弊.一切看起来更简洁,多个请求能够被组合,且非常容易控制.通过在UI线程观察和在 ...