笔戈 Web Team我爱编程

angular directive

2015-09-15  本文已影响644人  lucy_

directive 是 angular 中最重要的一部分,也是最难的部分。Angular 内部封装了一些指令,例如 ng-model ng-class ng-click。Angular 内部指令大部分都是以 ng 开头的。

directive 匹配方式

按照 Angular 的标准,指令的命名规则是以驼峰式命名的(例如ngModel)。然而,由于 HTML 是不区分大小写的,因此通常用一个 DOM 元素的划线分隔属性(例如ng-model)。

Angular 匹配指令过程如下:
1、去除元素或属性的前缀 data-x-
2、将 : _ - 连接字符串转换成驼峰表现形式

因此通常在使用中可以写成以下几种形式:

ng-model
ng:model
ng_model
data-ng-model
x-ng-model

directive 种类

$compile可以基于标签、属性、类名 、注释匹配 directive。

<my-directive></my-directibe> // 元素
<div my-directive='exp'></div> // 属性
<div class='my-directive'></div> // 类名
<!-- directive:my-directive exp --> // 注释

建议更多的使用标签和属性类型的指令。

创建自定义 directive

指令注册的方式与 controller 一样,但是它返回的是一个拥有指令配置属性的简单对象(指令定义对象) 。
下面的代码是一个简单的 myDirective 指令。

var app = angular.module('directive', []);

app.directive('myDirective', function() {
  return {
    template: '<div></div>',
    restrict: 'E',
    link: function postLink(scope, element, attrs) {
      element.text('my directive!!');
    }
  }
})

这个指令在 HTML 中以一个元素使用,如下
其中 templaterestrictlink 都是指令配置属性,还有其他的属性,我们对其逐一的解释,属性名称下的第一行分别是属性名称、属性类型、默认值。

  • multiElement
    多元素、booleanfalse
    当此属性设置为 true 时,HTML 编译器将收集在 directive-name-startdirective-name-end 两个属性之间的 DOM 节点,并将它们组一起作为指令元素。
    建议将此功能应用于行为不严格的指令(如 ngclick),和
    不处理或更换子节点(如 nginclude)。
上一篇 下一篇

猜你喜欢

热点阅读