AngularJS Directive 学习笔记
指令 Directive
指令要点
大漠老师的教学节点
- 解析最简单的指令 hello: 匹配模式 restrict
- 解析最简单的指令 hello: template、tempmlateUrl、$templateCache
- 解析最简单的指令 hello: replace 与 transclude
- compile 与 link (操作元素、添加 CSS 样式、绑定事件)
- 指令与控制器之间的交互
- 指令间的交互
- scope 的类型与独立 scope
- scope 的绑定策略
简单的指令
app.directive('hello', function() {return {// 四种: Element, Attribute, Comment, Class// Default: Attribute// Comment: <!-- directive:hello -->restrict: "E/A/M/C",// 模板template: '<h1>Hi everyone! </h1>',templateUrl: 'temp.html',// 是否替换节点内的内容replace: true}
});
transculde 转置
transclude 作用在于转置指令内部原有的内容,以免 replace: true
被设置时内部内容被全部替换,这样非常有用于嵌套指令
app.directive('ele', function() {return {// 注意:不能用 replace: truerestrict: 'AE',transclude: true,// 标签内部内容将会被转置到 div[ng-transclude] 内部template: "<h1>Hello AngularJS!</h1><div ng-transclude></div>"}
});
模板缓存
run 方法会在注册器加载完所有模块之后被执行一次
$templateCache 可以缓存模板以供多个指令使用
put & get 类似面向对象的 setter & getter 方法
app.run(function($templateCache) {$templateCache.put('hello.html', '<div>Hello AngularJS!</div>');
});// use get method to get cache
app.directive('ele', function($templateCache) {return {template: $templateCache.get('hello.html')}
});
compile 与 link
加载阶段
- 加载 angular.js,找到 ng-app 指令,确定应用的边界
编译阶段
- 遍历 DOM,找到所有指令
- 根据指令代码中的 template、replace、transclude 转换 DOM 结构
- 如果存在 compile 函数则调用
链接阶段
- 对每一条指令运行 link 函数
- link 函数一般用来操作 DOM、绑定事件监听器
指令调用控制器的方法,使用 link
HTML 代码
<loader howToLoad="loadData()">Hover to load</loader>
<loader howToLoad="loadData2()">Hover to load</loader>
AngularJS 代码
myModule.controller('MyCtrl', ['$scope',function($scope) {$scope.loadData = function() {console.log('Loading...');};$scope.loadData2 = function() {console.log('Loading2...');}}
]);myModule.directive('loader', function() {return {resetrict: 'AE',template: '',replace: true,link: function(scope, element, attr) {// 绑定事件element.bind('mouseenter', function() {// 以下两种形式都可以,推荐下面的scope.loadData();scope.$apply('loadData()');// 获取属性值// 根据指令特定属性的不同应用不同方法// 方法应小写scope.$apply(attrs.howtoload);});}}
});
指令之间的交互
重点是创建独立 scope,使得指令之间不互相影响
HTML 代码
<superman strength>Strength</superman>
<superman strength speed>Strength & Speed</superman>
<superman strength speed light>Stength & Speed & Light</superman>
AngularJS 代码
myModule.directive('superman', function() {return {// 创建独立 scopescope: {},restrict: 'AE',// 希望指令暴露出一些方法编写在 controller 里面供其他指令调用// 同时使用 this 指代 $scope,这样交互的指令才能引用controller: function($scope) {$scope.abilities = [];this.addStrength = function () {$scope.abilities.push('Strength');};this.addSpeed = function () {$scope.abilities.push('Speed');};this.addLight = function () {$scope.abilities.push('Light');};},// link 处理指令内部事件link: function (scope, element, attrs) {element.addClass('btn btn-primary btn-lg');element.bind('mouseenter', function() {console.log(scope.abilities);});}};
});myModule.directive('strength', function() {return {// 依赖于 superman 指令,这样 link 函数才可以调用 supermanCtrl 参数require: '^superman',link: function(scope, element, attrs, supermanCtrl) {supermanCtrl.addStrength();}};
});myModule.directive('speed', function() {return {require: '^superman',link: function(scope, element, attrs, supermanCtrl) {supermanCtrl.addSpeed();}};
});myModule.directive('light', function() {return {require: '^superman',link: function(scope, element, attrs, supermanCtrl) {supermanCtrl.addLight();}};
});
转载于:https://www.cnblogs.com/youngdze/p/4028032.html
AngularJS Directive 学习笔记相关推荐
- angularJs的学习笔记
angularJs的学习笔记,记录一下,额外学习,不用到项目中,怕以后忘了. 参考地址:http://www.ituring.com.cn/article/13473 改地址比较老了 建议多看看评 ...
- AngularJS的学习笔记(一)
声明:单纯作为我自己的学习笔记,纯是为了自己学习,上面的话都是从各处粘贴,如有冒犯,请原谅我这个小菜鸟~ AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷. 使用双大括 ...
- SAP Spartacus directive学习笔记
directive: 目的是给DOM元素添加自定义行为,可以和Component class一样,实现life cycle hooks: css selector: 在template中唯一标识一个D ...
- AngularJS的学习笔记(二)
只给自己看的. AngularJS 表达式 angularjs 使用表达式将数据绑定到html中. AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表 ...
- 慕课网懒懒交流会AngularJs专场学习笔记
1.Angular表单验证 原理: form.valid(valid(invalid,pristine,pristine,dirty) form.inputname.$valid 提出的问题:同时编辑 ...
- angularJs的学习笔记-01(创建项目)
1,进入angular-phonecat目录 执行下面命令 git checkout -f step-0 然后访问 http://localhost:8000/app/ 页面出现 "No ...
- 学习笔记-AngularJs(十)
前面一直在说自定义指令,但是却一直没有一次系统地去了解,现在需要我们一起来学习如何去使用自定义指令,去丰富html标签.属性,实现多元化.多功能的标签(或是属性).辣么,啥是指令?要了解指令,首先需要 ...
- AngularJs学习笔记--unit-testing
原版地址:http://docs.angularjs.org/guide/dev_guide.unit-testing javascript是一门动态类型语言,这给她带来了很强的表现能力,但同时也使编 ...
- angularjs directive scope变化为啥html,学习AngularJs:Directive指令用法(完整版)
本教程使用AngularJs版本:1.5.3 摘要:Directive(指令)笔者认为是AngularJ非常强大而有有用的功能之一.它就相当于为我们写了公共的自定义DOM元素或CLASS属性或ATTR ...
- 【AngularJs学习笔记五】AngularJS从构建项目开始
为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...
最新文章
- 泛型中? super T和? extends T的区别
- 软件开发人员能力模型
- android keytool 不是内部命令或外部命令在 (win7下不能用的解决方法)
- Java—数据库技术
- 信息学奥赛一本通 1029:计算浮点数相除的余 | OpenJudge NOI 1.3 11
- SpringSecurity的认识和整合流程
- IOS开发-UIView之动画效果的实现方法(合集)
- Leetcode 690
- 使用Microsoft Word中“多级列表”功能定制文档标题的方法
- sleuth zipkin mysql_springCloud的使用08-----服务链路追踪(sleuth+zipkin)
- .html页面缓存问题
- Python3判断字符中英文数字符号
- debian下安装小企鹅输入法
- EXCEL 自动求和
- 【沃顿商学院学习笔记】公益创业——01开始公益创业Starting a Social Enterprise
- python对英语的要求_对英文【对英文英语头条】- 对英文知识点 - 中企动力
- python 网易云音乐评论爬取3
- 高考选地理化学生物能考计算机专业吗,高考选科物理化学地理可以报考什么专业...
- 阿里巴巴微服务注册中心ConfigServer
- 天阔服务器1620-G15如何装系统,曙光服务器和存储产品与技术介绍.pptx
热门文章
- Linux根据端口号或者关键字查询进程,重启Tomcat服务脚本优缺点说明
- java log4jhelper_java项目中log4j的日志,控制台跟文件日志级别都是info,为什么文件跟控制台输出的还不同呢?...
- [渝粤教育] 西南科技大学 微机原理与应用 在线考试复习资料(2)
- [渝粤教育] 西南科技大学 公共管理学 在线考试复习资料
- 【渝粤教育】电大中专幼儿园课程论作业 题库
- Numpy系列(四)常用数学统计函数
- 经典机器学习系列(六)【集成学习】
- MLP多层感知机原理简介+代码详解
- understand 4 for linux register key code 随意、任性拥有。。。。
- static与extern 的作用、typedef关键字