- 浏览: 494444 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
AngularJs directive(指令)
返回的是一个对象,对象里面定义了一些属性,方法
1.restrict
指令方式选择
"E":元素名
"A":属性
"C":类名
"M":注释
2.template
模板(要替换的内容)
3.templateUrl
模板,从而可以把模板写到一个独立的HTML文件中
4.replace
true表示替换掉标签(就是HTML中不再有<hello>这个标签),当然就算有,因浏览器不能识别所以也不会显示出来
5.priority
(数字),可选参数,指明指令的优先级,若在单个DOM上有多个指令,则优先级高的先执行;
6.terminal
(布尔型),可选参数,可以被设置为true或false,若设置为true,则优先级低于此指令的其他指令则无效,不会被
调用(优先级相同的还是会执行)
7.scope
(1)默认值false。表示继承父作用域;
当为false时候,儿子继承父亲的值,改变父亲的值,儿子的值也随之变化,反之亦如此。(继承不隔离)
(2)true。表示继承父作用域,并创建自己的作用域(子作用域);
当为true时候,儿子继承父亲的值,改变父亲的值,儿子的值随之变化,但是改变儿子的值,父亲的值不变。(继承隔离)
(3){}。表示创建一个全新的隔离作用域;
当为{}时候,没有继承父亲的值,所以儿子的值为空,改变任何一方的值均不能影响另一方的值。(不继承隔离)
隔离作用域可以通过绑定策略来访问父作用域的属性。
提供了三种方法同隔离之外的地方交互:
1.@ 绑定一个局部 scope 属性到当前 dom 节点的属性值。结果总是一个字符串,因为 dom 属性是字符串。
2.& 提供一种方式执行一个表达式在父 scope 的上下文中。如果没有指定 attr 名称,则属性名称为相同的本地名称。
3.= 通过 directive 的 attr 属性的值在局部 scope 的属性和父 scope 属性名之间建立双向绑定。
@ 局部 scope 属性
@ 方式局部属性用来访问 directive 外部环境定义的字符串值,主要是通过 directive 所在的标签属性绑定外部字符串值。
这种绑定是单向的,即父 scope 的绑定变化,directive 中的 scope 的属性会同步变化,而隔离 scope 中的绑定变化,
父 scope 是不知道的。
= 局部 scope 属性
= 通过 directive 的 attr 属性的值在局部 scope 的属性和父 scope 属性名之间建立双向绑定。
意思是,当你想要一个双向绑定的属性的时候,你可以使用=来引入外部属性。无论是改变父 scope 还是隔离 scope 里的属性,
父 scope 和隔离 scope 都会同时更新属性值,因为它们是双向绑定的关系。
& 局部 scope 属性
& 方式提供一种途经是 directive 能在父 scope 的上下文中执行一个表达式。此表达式可以是一个 function。
比如当你写了一个 directive,当用户点击按钮时,directive 想要通知 controller,controller 无法知道
directive 中发生了什么,也许你可以通过使用 angular 中的 event 广播来做到,但是必须要在 controller
中增加一个事件监听方法。
最好的方法就是让 directive 可以通过一个父 scope 中的 function,当 directive 中有什么动作需要更新到
父 scope 中的时候,可以在父 scope 上下文中执行一段代码或者一个函数。
8.transclude
如果不想让指令内部的内容被模板替换,可以设置这个值为true。一般情况下需要和ngTransclude指令一起使用。 比如:
template:"<div>hello every <div ng-transclude></div></div>",这时,指令内部的内容会嵌入到ng-transclude这个
div中。也就是变成了<div>hello every <div>这是指令内部的内容</div></div>。默认值为false;这个配置选项可以让
我们提取包含在指令那个元素里面的内容,再将它放置在指令模板的特定位置。当你开启transclude后,你就可以使用
ng-transclude来指明了应该在什么地方放置transcluded内容
就是引用这个指令里的内容会被放入到指令模板ng-transclude处的位置,如是为false引用这个指令里的内容会全部被替换掉
9.controller
可以是一个字符串或者函数。
若是为字符串,则将字符串当做是控制器的名字,来查找注册在应用中的控制器的构造函数
另外还有一些特殊的服务(参数)可以注入
(1)$scope,与指令元素相关联的作用域
(2)$element,当前指令对应的 元素
(3)$attrs,由当前元素的属性组成的对象
(4)$transclude,嵌入链接函数,实际被执行用来克隆元素和操作DOM的函数
10.controllerAs
这个选项的作用是可以设置你的控制器的别名
11.require(字符串或者数组)(很少会用到)
12.Anguar的指令编译过程
1.首先加载angularjs库,查找到ng-app指令,从而找到应用的边界,
2.根据ng-app划定的作用域来调用$compile服务进行编译,angularjs会遍历整个HTML文档,并根据js中指令的定义来处理在
页面上声明的各个指令按照指令的优先级(priority)排列
3.根据指令中的配置参数(template,place,transclude等)转换DOM然后就开始按顺序执行各指令的compile函数(如果指令
上有定义compile函数)对模板自身进行转换
4.注意:此处的compile函数是我们指令中配置的,跟上面说的$compile服务不一样。每个compile函数执行完后都会返回一个
link函数,所有的link函数会合成一个大的link函数
5.然后这个大的link函数就会被执行,主要做数据绑定,通过在DOM上注册监听器来动态修改scope中的数据,或者是使用
$watchs监听 scope中的变量来修改DOM,从而建立双向绑定等等。
6.若我们的指令中没有配置compile函数,那我们配置的link函数就会运行,她做的事情大致跟上面complie返回之后所有的
link函数合成的的大的link函数差不多。
7.所以:在指令中compile与link选项是互斥的,如果同时设置了这两个选项,那么就会把compile所返回的函数当做是链接
函数,而link选项本身就会被忽略掉
13、编译函数 Compile function(很少会用到)
function compile(tElement, tAttrs, transclude) { ... }
编译函数是用来处理需要修改模板DOM的情况的。因为大部分指令都不需要修改模板,所以这个函数也不常用。需要用到的例
子有ngTrepeat,这个是需要修改模板的,还有ngView这个是需要异步载入内容的。编译函数接受以下参数。
tElement - template element - 指令所在的元素。对这个元素及其子元素进行变形之类的操作是安全的。
tAttrs - template attributes - 这个元素上所有指令声明的属性,这些属性都是在编译函数里共享的。
transclude - 一个嵌入的链接函数function(scope, cloneLinkingFn)。
注意:在编译函数里面不要进行任何DOM变形之外的操作。 更重要的,DOM监听事件的注册应该在链接函数中做,而不是编译函数中。
编译函数可以返回一个对象或者函数。
返回函数 - 等效于在编译函数不存在时,使用配置对象的link属性注册的链接函数。
返回对象 - 返回一个通过pre或post属性注册了函数的对象。参考下面pre-linking和post-liking函数的解释。
14、链接函数 Linking function(很少会用到)
function link(scope, iElement, iAttrs, controller) { ... }
链接函数负责注册DOM事件和更新DOM。它是在模板被克隆之后执行的,它也是大部分指令逻辑代码编写的地方。
scope - 指令需要监听的作用域。
iElement - instance element - 指令所在的元素。只有在postLink函数中对元素的子元素进行操作才是安全的,因为那时它们才已经全部链接好。
iAttrs - instance attributes - 实例属性,一个标准化的、所有声明在当前元素上的属性列表,这些属性在所有链接函数间是共享的。
controller - 控制器实例,也就是当前指令通过require请求的指令direct2内部的controller。比如:direct2指令中的
controller:function(){this.addStrength = function(){}},那么,在当前指令的link函数中,你就可以通过controller.addStrength进行调用了。
Pre-linking function 在子元素被链接前执行。不能用来进行DOM的变形,以防链接函数找不到正确的元素来链接。
Post-linking function 所有元素都被链接后执行。
参考原文:http://www.jb51.net/article/83051.htm
返回的是一个对象,对象里面定义了一些属性,方法
var appModule = angular.module('app', []); appModule.directive('hello', function() { return { restrict: 'E', //restrict:指令方式选择 template: '<div>Hi there</div>',//模板(要替换的内容) replace: true //true表示HTML中不再有<hello>这个标签 }; });
1.restrict
指令方式选择
"E":元素名
"A":属性
"C":类名
"M":注释
2.template
模板(要替换的内容)
3.templateUrl
模板,从而可以把模板写到一个独立的HTML文件中
4.replace
true表示替换掉标签(就是HTML中不再有<hello>这个标签),当然就算有,因浏览器不能识别所以也不会显示出来
5.priority
(数字),可选参数,指明指令的优先级,若在单个DOM上有多个指令,则优先级高的先执行;
6.terminal
(布尔型),可选参数,可以被设置为true或false,若设置为true,则优先级低于此指令的其他指令则无效,不会被
调用(优先级相同的还是会执行)
7.scope
(1)默认值false。表示继承父作用域;
当为false时候,儿子继承父亲的值,改变父亲的值,儿子的值也随之变化,反之亦如此。(继承不隔离)
(2)true。表示继承父作用域,并创建自己的作用域(子作用域);
当为true时候,儿子继承父亲的值,改变父亲的值,儿子的值随之变化,但是改变儿子的值,父亲的值不变。(继承隔离)
(3){}。表示创建一个全新的隔离作用域;
当为{}时候,没有继承父亲的值,所以儿子的值为空,改变任何一方的值均不能影响另一方的值。(不继承隔离)
隔离作用域可以通过绑定策略来访问父作用域的属性。
提供了三种方法同隔离之外的地方交互:
1.@ 绑定一个局部 scope 属性到当前 dom 节点的属性值。结果总是一个字符串,因为 dom 属性是字符串。
2.& 提供一种方式执行一个表达式在父 scope 的上下文中。如果没有指定 attr 名称,则属性名称为相同的本地名称。
3.= 通过 directive 的 attr 属性的值在局部 scope 的属性和父 scope 属性名之间建立双向绑定。
@ 局部 scope 属性
@ 方式局部属性用来访问 directive 外部环境定义的字符串值,主要是通过 directive 所在的标签属性绑定外部字符串值。
这种绑定是单向的,即父 scope 的绑定变化,directive 中的 scope 的属性会同步变化,而隔离 scope 中的绑定变化,
父 scope 是不知道的。
$scope.name = "hello world"; //父scope <div isolated-directive name="{{name}}"></div> scope: { //子scope name: "@" //使用@绑定 name 属性 }
= 局部 scope 属性
= 通过 directive 的 attr 属性的值在局部 scope 的属性和父 scope 属性名之间建立双向绑定。
意思是,当你想要一个双向绑定的属性的时候,你可以使用=来引入外部属性。无论是改变父 scope 还是隔离 scope 里的属性,
父 scope 和隔离 scope 都会同时更新属性值,因为它们是双向绑定的关系。
$scope.userBase = { //父scope name: 'hello', id: 1 } <div isolated-directive user="userBase"></div> scope: { //子scope user: "=" //使用@绑定 name 属性 }
& 局部 scope 属性
& 方式提供一种途经是 directive 能在父 scope 的上下文中执行一个表达式。此表达式可以是一个 function。
比如当你写了一个 directive,当用户点击按钮时,directive 想要通知 controller,controller 无法知道
directive 中发生了什么,也许你可以通过使用 angular 中的 event 广播来做到,但是必须要在 controller
中增加一个事件监听方法。
最好的方法就是让 directive 可以通过一个父 scope 中的 function,当 directive 中有什么动作需要更新到
父 scope 中的时候,可以在父 scope 上下文中执行一段代码或者一个函数。
$scope.click = function () { //父scope $scope.value = Math.random(); } <div isolated-directive action="click()"></div> scope: { //子scope action: "&" }
8.transclude
如果不想让指令内部的内容被模板替换,可以设置这个值为true。一般情况下需要和ngTransclude指令一起使用。 比如:
template:"<div>hello every <div ng-transclude></div></div>",这时,指令内部的内容会嵌入到ng-transclude这个
div中。也就是变成了<div>hello every <div>这是指令内部的内容</div></div>。默认值为false;这个配置选项可以让
我们提取包含在指令那个元素里面的内容,再将它放置在指令模板的特定位置。当你开启transclude后,你就可以使用
ng-transclude来指明了应该在什么地方放置transcluded内容
就是引用这个指令里的内容会被放入到指令模板ng-transclude处的位置,如是为false引用这个指令里的内容会全部被替换掉
9.controller
可以是一个字符串或者函数。
若是为字符串,则将字符串当做是控制器的名字,来查找注册在应用中的控制器的构造函数
另外还有一些特殊的服务(参数)可以注入
(1)$scope,与指令元素相关联的作用域
(2)$element,当前指令对应的 元素
(3)$attrs,由当前元素的属性组成的对象
(4)$transclude,嵌入链接函数,实际被执行用来克隆元素和操作DOM的函数
10.controllerAs
这个选项的作用是可以设置你的控制器的别名
11.require(字符串或者数组)(很少会用到)
12.Anguar的指令编译过程
1.首先加载angularjs库,查找到ng-app指令,从而找到应用的边界,
2.根据ng-app划定的作用域来调用$compile服务进行编译,angularjs会遍历整个HTML文档,并根据js中指令的定义来处理在
页面上声明的各个指令按照指令的优先级(priority)排列
3.根据指令中的配置参数(template,place,transclude等)转换DOM然后就开始按顺序执行各指令的compile函数(如果指令
上有定义compile函数)对模板自身进行转换
4.注意:此处的compile函数是我们指令中配置的,跟上面说的$compile服务不一样。每个compile函数执行完后都会返回一个
link函数,所有的link函数会合成一个大的link函数
5.然后这个大的link函数就会被执行,主要做数据绑定,通过在DOM上注册监听器来动态修改scope中的数据,或者是使用
$watchs监听 scope中的变量来修改DOM,从而建立双向绑定等等。
6.若我们的指令中没有配置compile函数,那我们配置的link函数就会运行,她做的事情大致跟上面complie返回之后所有的
link函数合成的的大的link函数差不多。
7.所以:在指令中compile与link选项是互斥的,如果同时设置了这两个选项,那么就会把compile所返回的函数当做是链接
函数,而link选项本身就会被忽略掉
13、编译函数 Compile function(很少会用到)
function compile(tElement, tAttrs, transclude) { ... }
编译函数是用来处理需要修改模板DOM的情况的。因为大部分指令都不需要修改模板,所以这个函数也不常用。需要用到的例
子有ngTrepeat,这个是需要修改模板的,还有ngView这个是需要异步载入内容的。编译函数接受以下参数。
tElement - template element - 指令所在的元素。对这个元素及其子元素进行变形之类的操作是安全的。
tAttrs - template attributes - 这个元素上所有指令声明的属性,这些属性都是在编译函数里共享的。
transclude - 一个嵌入的链接函数function(scope, cloneLinkingFn)。
注意:在编译函数里面不要进行任何DOM变形之外的操作。 更重要的,DOM监听事件的注册应该在链接函数中做,而不是编译函数中。
编译函数可以返回一个对象或者函数。
返回函数 - 等效于在编译函数不存在时,使用配置对象的link属性注册的链接函数。
返回对象 - 返回一个通过pre或post属性注册了函数的对象。参考下面pre-linking和post-liking函数的解释。
14、链接函数 Linking function(很少会用到)
function link(scope, iElement, iAttrs, controller) { ... }
链接函数负责注册DOM事件和更新DOM。它是在模板被克隆之后执行的,它也是大部分指令逻辑代码编写的地方。
scope - 指令需要监听的作用域。
iElement - instance element - 指令所在的元素。只有在postLink函数中对元素的子元素进行操作才是安全的,因为那时它们才已经全部链接好。
iAttrs - instance attributes - 实例属性,一个标准化的、所有声明在当前元素上的属性列表,这些属性在所有链接函数间是共享的。
controller - 控制器实例,也就是当前指令通过require请求的指令direct2内部的controller。比如:direct2指令中的
controller:function(){this.addStrength = function(){}},那么,在当前指令的link函数中,你就可以通过controller.addStrength进行调用了。
Pre-linking function 在子元素被链接前执行。不能用来进行DOM的变形,以防链接函数找不到正确的元素来链接。
Post-linking function 所有元素都被链接后执行。
参考原文:http://www.jb51.net/article/83051.htm
发表评论
-
lazyLoad
2017-05-10 00:11 556<!DOCTYPE html> <html ... -
timer
2017-05-10 00:17 421<!DOCTYPE html> <html ... -
滚动到指定元素、判断对象是否为空
2017-05-10 00:16 710<!DOCTYPE html> <html ... -
Http请求封装
2017-05-09 22:21 546<!DOCTYPE html> <html ... -
上传文件内容改变和上传文件
2017-05-09 21:56 502<!DOCTYPE html> <html ... -
ng-click参数传递
2017-05-09 21:35 944<!DOCTYPE html> <html ... -
promise(js里很多服务的then实现分析)
2016-09-14 01:07 942promise(很多少服务的then) 1、promise ... -
Anguar 工作过程
2016-09-14 01:05 364Anguar 工作过程 Anguar的指令编译过程: 1 ... -
AngularJS Ajax($http)
2016-09-14 01:07 806AngularJS Ajax($http) 1.$http ... -
Angularjs run(AngularJS应用中第一个被执行的方法)
2016-09-15 13:10 602Angularjs run(AngularJS应用中第一个被执 ... -
AngularJs框架下controller间的传值方法
2016-09-15 13:10 600AngularJs框架下controller间的传值方法 ... -
$on、$emit和$broadcast的使用
2016-09-13 15:04 637$on、$emit和$broadcast的使用 如何在作 ... -
AngularJs API
2016-09-13 14:59 585AngularJs API 以下列出了一些通用的 API ... -
AngularJS 路由
2016-09-13 14:58 596AngularJS 路由 AngularJS 路由允许我们 ... -
AngularJS $location
2016-09-13 14:46 625AngularJS $location $location ... -
AngularJS中service,factory,provider的区别
2016-09-13 09:30 609AngularJS中service,factory ... -
AngularJS基础
2016-09-17 20:52 421AngularJS基础 AngularJS 是 ...
相关推荐
在本文中,我们将深入探讨如何在AngularJS框架中创建自定义指令来封装ECharts 2的雷达图。ECharts是一款由百度开发的开源JavaScript图表库,它提供了丰富的可视化图表类型,包括雷达图。AngularJS是一个强大的前端...
Directive是AngularJS的最小指令性组件,它可以通过添加属性、元素、注释、或者类来改变DOM元素的行为。通过使用Directive,我们可以创建可重用的、可定制的、封装好的代码块。 接下来,文章中提到了创建一个表格的...
在AngularJS中,自定义指令通过`@Directive`装饰器声明,其基本结构包括: ```javascript app.directive('directiveName', function() { return { restrict: 'AECM', // A - attribute, E - element, C - class, ...
1. **定义指令**:在AngularJS应用中,使用`angular.module.directive()`来定义一个新的指令。例如: ```javascript angular.module('myApp').directive('customDropdown', function() { return { restrict: 'E'...
主要介绍了AngularJS中directive指令使用之事件绑定与指令交互用法,结合实例形式分析了directive指令在模板的使用,事件的绑定及元素、属性、控制器之间的交互相关操作技巧,需要的朋友可以参考下
在这个场景中,我们关注的是如何利用AngularJS的自定义指令来封装ECharts 2的折线图功能。ECharts是一个基于JavaScript的开源可视化库,它提供了丰富的图表类型,包括折线图、柱状图、饼图等,适用于各种数据展示...
AngularJS中的自定义指令(Directives)是框架的核心特性之一,允许开发者创建可复用的UI组件,并且能够与应用程序的模型(Model)进行数据交互。在这个场景中,我们将深入探讨如何在AngularJS中实现自定义指令的...
自定义指令(Directive)是AngularJS框架中非常强大的特性之一,它允许开发者创建自己的HTML标签,属性,类或注释,从而定义新的HTML标记,使其具有特定的行为和样式。 在AngularJS中,一个指令就是一个对象,它...
在本文中,我们将深入探讨如何在 AngularJS 中创建自定义指令来封装 ECharts 2 的柱状图。ECharts 是一个基于 JavaScript 的数据可视化库,它提供了丰富的图表类型,包括柱状图、折线图、饼图等。AngularJS 是一个...
本文将深入探讨AngularJS的指令(Directives)及其用法。 AngularJS 指令是框架的核心特性之一,它们允许你扩展HTML的语义,使HTML能够表达更多的业务逻辑和数据绑定。指令通过在HTML元素、属性、类或注释中声明,...
创建自定义指令需要使用`angular.module().directive()`方法,其中`directive`函数接收两个参数:指令名称和一个配置对象。配置对象可以包含多个选项,如`restrict`(限制指令的应用方式,如元素、属性、类或注释)...
AngularJS是一个强大的前端JavaScript框架,其核心特性之一就是自定义指令。自定义指令允许开发者扩展HTML,创建新的元素或属性,以实现特定的功能。在本文中,我们将深入探讨AngularJS自定义指令的创建、使用以及...
angularjs中使用.directive()来定义指令,该方法接收两个参数:name(指令的名字)、factory_function(该函数定义指令的全部行为,返回一个对象) 栗子: //index.js angular.module('myApp',[]); myApp....
AngularJS 自定义指令 transclude:当元素标签需要嵌套时使用,与ng-transclude配合使用。默认值为false不能使用嵌套,true为可以使用嵌套。在哪个标签上使用ng-transclude就在哪个标签内进行嵌套。 代码示例:...
在AngularJS中,可以使用`angular.module.directive()`方法定义一个自定义指令。这个指令将用于包裹地理位置的选择器。在指令中,我们可以定义模板、链接函数以及控制器等。 2. **构建数据结构**: 首先,我们...