指令 Directive

指令要点

大漠老师的教学节点

  • 解析最简单的指令 hello: 匹配模式 restrict
  • 解析最简单的指令 hello: templatetempmlateUrl$templateCache
  • 解析最简单的指令 hello: replacetransclude
  • compilelink (操作元素、添加 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')}
});

compilelink

  • 加载阶段

    • 加载 angular.js,找到 ng-app 指令,确定应用的边界
  • 编译阶段

    • 遍历 DOM,找到所有指令
    • 根据指令代码中的 templatereplacetransclude 转换 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 &amp; Speed</superman>
<superman strength speed light>Stength &amp; Speed &amp; 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 学习笔记相关推荐

  1. angularJs的学习笔记

    angularJs的学习笔记,记录一下,额外学习,不用到项目中,怕以后忘了. 参考地址:http://www.ituring.com.cn/article/13473  改地址比较老了  建议多看看评 ...

  2. AngularJS的学习笔记(一)

    声明:单纯作为我自己的学习笔记,纯是为了自己学习,上面的话都是从各处粘贴,如有冒犯,请原谅我这个小菜鸟~ AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷. 使用双大括 ...

  3. SAP Spartacus directive学习笔记

    directive: 目的是给DOM元素添加自定义行为,可以和Component class一样,实现life cycle hooks: css selector: 在template中唯一标识一个D ...

  4. AngularJS的学习笔记(二)

    只给自己看的. AngularJS 表达式 angularjs 使用表达式将数据绑定到html中. AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表 ...

  5. 慕课网懒懒交流会AngularJs专场学习笔记

    1.Angular表单验证 原理: form.valid(valid(invalid,pristine,pristine,dirty) form.inputname.$valid 提出的问题:同时编辑 ...

  6. angularJs的学习笔记-01(创建项目)

    1,进入angular-phonecat目录  执行下面命令 git checkout -f step-0 然后访问 http://localhost:8000/app/  页面出现 "No ...

  7. 学习笔记-AngularJs(十)

    前面一直在说自定义指令,但是却一直没有一次系统地去了解,现在需要我们一起来学习如何去使用自定义指令,去丰富html标签.属性,实现多元化.多功能的标签(或是属性).辣么,啥是指令?要了解指令,首先需要 ...

  8. AngularJs学习笔记--unit-testing

    原版地址:http://docs.angularjs.org/guide/dev_guide.unit-testing javascript是一门动态类型语言,这给她带来了很强的表现能力,但同时也使编 ...

  9. angularjs directive scope变化为啥html,学习AngularJs:Directive指令用法(完整版)

    本教程使用AngularJs版本:1.5.3 摘要:Directive(指令)笔者认为是AngularJ非常强大而有有用的功能之一.它就相当于为我们写了公共的自定义DOM元素或CLASS属性或ATTR ...

  10. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

最新文章

  1. 泛型中? super T和? extends T的区别
  2. 软件开发人员能力模型
  3. android keytool 不是内部命令或外部命令在 (win7下不能用的解决方法)
  4. Java—数据库技术
  5. 信息学奥赛一本通 1029:计算浮点数相除的余 | OpenJudge NOI 1.3 11
  6. SpringSecurity的认识和整合流程
  7. IOS开发-UIView之动画效果的实现方法(合集)
  8. Leetcode 690
  9. 使用Microsoft Word中“多级列表”功能定制文档标题的方法
  10. sleuth zipkin mysql_springCloud的使用08-----服务链路追踪(sleuth+zipkin)
  11. .html页面缓存问题
  12. Python3判断字符中英文数字符号
  13. debian下安装小企鹅输入法
  14. EXCEL 自动求和
  15. 【沃顿商学院学习笔记】公益创业——01开始公益创业Starting a Social Enterprise
  16. python对英语的要求_对英文【对英文英语头条】- 对英文知识点 - 中企动力
  17. python 网易云音乐评论爬取3
  18. 高考选地理化学生物能考计算机专业吗,高考选科物理化学地理可以报考什么专业...
  19. 阿里巴巴微服务注册中心ConfigServer
  20. 天阔服务器1620-G15如何装系统,曙光服务器和存储产品与技术介绍.pptx

热门文章

  1. Linux根据端口号或者关键字查询进程,重启Tomcat服务脚本优缺点说明
  2. java log4jhelper_java项目中log4j的日志,控制台跟文件日志级别都是info,为什么文件跟控制台输出的还不同呢?...
  3. [渝粤教育] 西南科技大学 微机原理与应用 在线考试复习资料(2)
  4. [渝粤教育] 西南科技大学 公共管理学 在线考试复习资料
  5. 【渝粤教育】电大中专幼儿园课程论作业 题库
  6. Numpy系列(四)常用数学统计函数
  7. 经典机器学习系列(六)【集成学习】
  8. MLP多层感知机原理简介+代码详解
  9. understand 4 for linux register key code 随意、任性拥有。。。。
  10. static与extern 的作用、typedef关键字