controller的用法分为两种情形,一种是require自定义的controller,由于自定义controller中的属性方法都由自己编 写,使用起来比较简单;另一种方法则是require AngularJS内建的指令,其中大部分时间需要require的都是ngModel这个指令。
在自定义Angular指令时,其中有一个叫做require的字段,这个字段的作用是用于指令之间的相互交流。举个简单的例子,假如我们现在需要编写两 个指令,在linking函数中有很多重合的方法,为了避免重复自己(著名的DRY原则),我们可以将这个重复的方法写在第三个指令的 controller中,然后在另外两个需要的指令中require这个拥有controller字段的指令,最后通过linking函数的第四个参数就可以引用这些重合的方法。代码的结构大致如下:
var app = angular.modeule('myapp',[]); app.directive('common',function(){ return { ... controller: function($scope){ this.method1 = function(){ }; this.method2 = function(){ }; }, ... } }); app.directive('d1',function(){ return { ... require: '?^common', link: function(scope,elem,attrs,common){ scope.method1 = common.method1; .. }, ... } });
当然,上面例子只是指令中controller用法的一种。虽然一般来说,使用controller字段的机会不是很多,但是想要写好AngularJS的指令,这是必须要掌握的一点。
引用内置指令
angular.module('myApp') .directive('spoint', function() { return { require: 'ngModel', link: function(scope, elm, attrs, ctrl) { var fibonacci = [1, 2, 3, 5, 8, 13, 20, 40, 80]; ctrl.$parsers.unshift(function(viewValue) { if (fibonacci.indexOf(parseInt(viewValue)) >= 0) { ctrl.$setValidity('fibonacci', true); return viewValue; } else { ctrl.$setValidity('fibonacci', false); return undefined; } }); } }; });
这里值得注意的是directive里link方法的第四个参数,我们在require里定义了ngModel 所以这里它是一个NgModelController
NgModelController是用来为ng-model提供了一组API。通过他我们可以他来确定ngModel的 值是否是合法的。 我们这里只介绍其中和表单验证有关的几个方法和属性。
上面的例子中我们用到了$parsers这个属性和$setValidity()这个方法。 $parsers里保存了一组function, 每当DOM里数据变化的时候, 这组function会被一次调用。这里给了我们机会在用户修改了DOM里值的时候, 去对新输入的值做校验。
“智能浮点(smart-float)”指令。它能把"1.2"或者"1,2"都转化为合法的浮点数"1.2"。注意,这里我们不能使用“数字输入类型”,因为HTML5的浏览器不允许用户输入像"1,2"这样的非法值。
html
<input type="text" ng-model="length" name="length" smart-float /> {{length}}<br /> <span ng-show="form.length.$error.float">This is not a valid float number!</span>
js
var FLOAT_REGEXP = /^\-?\d+((\.|\,)\d+)?$/; app.directive('smartFloat', function() { return { require: 'ngModel', link: function(scope, elm, attrs, ctrl) { ctrl.$parsers.unshift(function(viewValue) { if (FLOAT_REGEXP.test(viewValue)) { ctrl.$setValidity('float', true); return parseFloat(viewValue.replace(',', '.')); } else { ctrl.$setValidity('float', false); return undefined; } }); } }; });
相关推荐
在AngularJS中,自定义指令(Directives)是框架的核心特性之一,允许开发者扩展HTML语法,创建可重用的UI组件或行为。本教程将深入探讨如何利用AngularJS的自定义指令来实现正则表达式的校验功能,特别是针对HTTP...
一、理解AngularJS指令 AngularJS指令是用于增强HTML的特殊属性,通过`ng-`前缀标识,如`ng-repeat`、`ng-click`等。自定义指令则允许我们创建自己的这种增强功能,例如`app-validator`。 二、创建自定义指令 创建...
在这个"angularjs-directive-workshop"中,我们将深入探讨 AngularJS 的指令特性,这些是构建可复用、组件化的前端应用的关键工具。 指令是 AngularJS 的核心特性之一,它们允许我们扩展 HTML,添加自定义的行为和...
自定义指令(Directive)是AngularJS框架中非常强大的特性之一,它允许开发者创建自己的HTML标签,属性,类或注释,从而定义新的HTML标记,使其具有特定的行为和样式。 在AngularJS中,一个指令就是一个对象,它...
一个AngularJS指令通常由以下部分组成:`name`、`restrict`、`template`、`replace`、`scope`、`link`和`controller`。其中,`controller`属性就是我们要讨论的重点,它定义了一个与指令关联的控制器函数,可以在这...
AngularJS提供了多种方式实现指令之间的通信,包括使用`$emit`、`$broadcast`事件广播,以及使用`require`属性来引用其他指令的控制器。 **8. 组合指令** 通过使用`require`属性,一个指令可以访问并控制另一个...
1. **AngularJS 指令的创建与基本结构**:文档提到了如何创建基本的AngularJS指令,这涉及到AngularJS模块的创建以及使用module.directive()方法定义指令。每个指令都有其自己的配置对象,其中包括了定义指令行为的...
AngularJS 的指令是框架的核心组件之一,它们扩展了 HTML,赋予其新的行为。 一、AngularJS 指令概述 AngularJS 指令是用于在 HTML 元素上添加特定功能的特殊属性。它们以 `ng-` 前缀开头,如 `ng-repeat`, `ng-...
本篇将详细介绍AngularJS指令间如何进行交互以及独立作用域的概念。 1. **独立作用域(Isolate Scope)** 在AngularJS中,每个指令可以有自己的作用域,这被称为独立作用域。默认情况下,指令之间共享同一个父级...
总结,AngularJS指令是其强大功能的关键所在,它们提供了一种声明式的方式来操作DOM,实现了视图与数据的紧密绑定。理解并熟练掌握指令的使用,对于开发高效的AngularJS应用程序至关重要。通过深入学习和实践,你...
AngularJS 指令是框架的核心特性之一,它们允许你扩展HTML的语义,使HTML能够表达更多的业务逻辑和数据绑定。指令通过在HTML元素、属性、类或注释中声明,从而在页面加载时被AngularJS的编译器识别和执行。 1. **...
### 知识点五:AngularJS指令的动态注册 类似地,`$compileProvider`服务提供了动态注册指令的能力。这允许开发者在运行时构建指令,然后再将其应用到DOM中。 ### 知识点六:AngularJS的$q服务 $q是AngularJS中...
下面我们将深入探讨AngularJS指令的相关知识点。 1. `restrict` 参数: `restrict` 参数用于定义指令如何在DOM中被声明。它接受四个字符的组合:'E'(元素)、'A'(属性)、'C'(类名)和'M'(注释)。默认值为'A'...
- **指令封装**:AngularJS 的强大之处在于其自定义指令的能力。通过创建一个新的指令,我们可以将jQuery Datepicker的功能整合到AngularJS的环境中。这个指令通常会监听元素的变化,然后触发Datepicker的显示和隐藏...
- `require`: 定义指令依赖的其他指令,可以是一个字符串或数组,用于在`link`或`compile`函数中访问这些依赖的指令。 - `link`和`compile`: `link`函数在指令实例化时运行,常用于DOM操作和数据绑定。`compile`...
1. **理解AngularJS指令** AngularJS中的指令是扩展HTML的一种方式,通过指令,我们可以为HTML元素添加新的行为或改变其表现。例如,`ngRepeat`指令用于循环遍历数据,`ngClick`用于响应点击事件。指令分为内置指令...
`require`属性则指定了指令需要依赖的其他指令,比如`require: '^ngModel'`表示当前指令需要`ngModel`指令作为父指令。 最后,`link`和`compile`函数都是用来操作DOM的。`link`函数在编译完成后执行,通常用于添加...