指令要点
大漠穷秋老师的教学节点
- 解析最简单的指令 hello: 匹配模式 restrict
- 解析最简单的指令 hello: template、tempmlateUrl、$templateCache
- 解析最简单的指令 hello: replace 与 transclude
- compile 与 link (操作元素、添加 CSS 样式、绑定事件)
- 指令与控制器之间的交互
- 指令间的交互
- scope 的类型与独立 scope
- scope 的绑定策略
简单的指令
1 | app.directive('hello', function() { |
transculde 转置
transclude 作用在于转置指令内部原有的内容,以免 replace: true
被设置时内部内容被全部替换,这样非常有用于嵌套指令
1 | app.directive('ele', function() { |
模板缓存
- run 方法会在注册器加载完所有模块之后被执行一次
- $templateCache 可以缓存模板以供多个指令使用
- put & get 类似面向对象的 setter & getter 方法
1 | app.run(function($templateCache) { |
compile 与 link
- 加载阶段
- 加载 angular.js,找到 ng-app 指令,确定应用的边界
- 编译阶段
- 遍历 DOM,找到所有指令
- 根据指令代码中的 template、replace、transclude 转换 DOM 结构
- 如果存在 compile 函数则调用
- 链接阶段
- 对每一条指令运行 link 函数
- link 函数一般用来操作 DOM、绑定事件监听器
指令调用控制器的方法,使用 link
HTML 代码
1 | <loader howToLoad="loadData()">Hover to load</loader> |
AngularJS 代码
1 | myModule.controller('MyCtrl', ['$scope', |
指令之间的交互
重点是创建独立 scope,使得指令之间不互相影响
HTML 代码
1 | <superman strength>Strength</superman> |
AngularJS 代码
1 | myModule.directive('superman', function() { |