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 ...
随机推荐
- 纠结和郁闷的存在感-关于DirectX与HLSL的矩阵存储方式---转载好文章
我常常这么大胆的认为,搞科学的人总是喜欢用各种让常人难以理解的复杂方式去处理某些其实可能很简单的事情,这种情况在他自身擅长的.有着诸多对手竞争的领域上极为常见.比如吧,搞DirectX的人用了左手坐标 ...
- @jsonignore的作用
作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响. 如下: package com.hzboy.orm; import java.util.List; impor ...
- source idea of Unit
After the construction of Global environment setting code, there is a convenient way for us in the f ...
- js兼容多浏览器的关闭当前页面
关闭当前页面,相信不少人在开发中都遇到过这个需求,但面对这么多的浏览器,要做到js的兼容还需要做特殊的处理.关于这方面网上有很多的资料,但大多都是复制粘贴的,没有达到兼容的效果,或者是效果不好. 下面 ...
- WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data
异常信息:The maximum string content length quota (8192) has been exceeded while reading XML data 问题:调用第三 ...
- linux shared lib 使用与编译
一. 动态链接库的原理及使用 Linux提供4个库函数.一个头文件dlfcn.h以及两个共享库(静态库libdl.a和动态库libdl.so)支持动态链接. Ø ...
- Myeclipse 安装Aptana3.2 插件
转自(http://www.cnblogs.com/yinger/archive/2011/08/29/2157193.html) 安装步骤: 1.下载aptana3.2 Eclipse Plugin ...
- JFinal 部署在 Tomcat 下推荐方法(转)
首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别.Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免,所以撰写 ...
- 射手网字幕打包下载(73.16G)
射手网陪着我度过15年了. 我所希望射手网所具有的价值,就是能令更多人跨越国家的樊篱,了解世界上不同的文化. 如果这个网站有帮到人,我就已经很满足了. 但是,需要射手网的时代已经走开了. 因此,今天, ...
- mysql 数据库自增id 的总结
有一个表StuInfo,里面只有两列 StuID,StuName其中StuID是int型,主键,自增列.现在我要插入数据,让他自动的向上增长,insert into StuInfo(StuID,Stu ...