`
hudeyong926
  • 浏览: 2033229 次
  • 来自: 武汉
社区版块
存档分类
最新评论

AngularJs 指令directive之require

 
阅读更多

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自定义指令directive正则表达校验

    在AngularJS中,自定义指令(Directives)是框架的核心特性之一,允许开发者扩展HTML语法,创建可重用的UI组件或行为。本教程将深入探讨如何利用AngularJS的自定义指令来实现正则表达式的校验功能,特别是针对HTTP...

    angularjs自定义正则表达校验指令directive

    一、理解AngularJS指令 AngularJS指令是用于增强HTML的特殊属性,通过`ng-`前缀标识,如`ng-repeat`、`ng-click`等。自定义指令则允许我们创建自己的这种增强功能,例如`app-validator`。 二、创建自定义指令 创建...

    angularjs-directive-workshop:JSSummit 的简单一步一步的 AngularJS 指令教程

    在这个"angularjs-directive-workshop"中,我们将深入探讨 AngularJS 的指令特性,这些是构建可复用、组件化的前端应用的关键工具。 指令是 AngularJS 的核心特性之一,它们允许我们扩展 HTML,添加自定义的行为和...

    Angularjs自定义指令Directive详解

    自定义指令(Directive)是AngularJS框架中非常强大的特性之一,它允许开发者创建自己的HTML标签,属性,类或注释,从而定义新的HTML标记,使其具有特定的行为和样式。 在AngularJS中,一个指令就是一个对象,它...

    AngularJS-Directive-Controllers:探索使用指令控制器允许方向间通信

    一个AngularJS指令通常由以下部分组成:`name`、`restrict`、`template`、`replace`、`scope`、`link`和`controller`。其中,`controller`属性就是我们要讨论的重点,它定义了一个与指令关联的控制器函数,可以在这...

    AngularJS 0003: 指令

    AngularJS提供了多种方式实现指令之间的通信,包括使用`$emit`、`$broadcast`事件广播,以及使用`require`属性来引用其他指令的控制器。 **8. 组合指令** 通过使用`require`属性,一个指令可以访问并控制另一个...

    AngularJS 指令的交互详解及实例代码

    1. **AngularJS 指令的创建与基本结构**:文档提到了如何创建基本的AngularJS指令,这涉及到AngularJS模块的创建以及使用module.directive()方法定义指令。每个指令都有其自己的配置对象,其中包括了定义指令行为的...

    angularjs-directives:其他 AngularJS 指令

    AngularJS 的指令是框架的核心组件之一,它们扩展了 HTML,赋予其新的行为。 一、AngularJS 指令概述 AngularJS 指令是用于在 HTML 元素上添加特定功能的特殊属性。它们以 `ng-` 前缀开头,如 `ng-repeat`, `ng-...

    AngularJS指令与指令之间的交互功能示例

    本篇将详细介绍AngularJS指令间如何进行交互以及独立作用域的概念。 1. **独立作用域(Isolate Scope)** 在AngularJS中,每个指令可以有自己的作用域,这被称为独立作用域。默认情况下,指令之间共享同一个父级...

    AngularJSDirectivesFundamentals:AngularJS指令基础

    总结,AngularJS指令是其强大功能的关键所在,它们提供了一种声明式的方式来操作DOM,实现了视图与数据的紧密绑定。理解并熟练掌握指令的使用,对于开发高效的AngularJS应用程序至关重要。通过深入学习和实践,你...

    AngularJs directive详解及示例代码

    AngularJS 指令是框架的核心特性之一,它们允许你扩展HTML的语义,使HTML能够表达更多的业务逻辑和数据绑定。指令通过在HTML元素、属性、类或注释中声明,从而在页面加载时被AngularJS的编译器识别和执行。 1. **...

    angularJS+requireJS实现controller及directive的按需加载示例

    ### 知识点五:AngularJS指令的动态注册 类似地,`$compileProvider`服务提供了动态注册指令的能力。这允许开发者在运行时构建指令,然后再将其应用到DOM中。 ### 知识点六:AngularJS的$q服务 $q是AngularJS中...

    理解AngularJs指令

    下面我们将深入探讨AngularJS指令的相关知识点。 1. `restrict` 参数: `restrict` 参数用于定义指令如何在DOM中被声明。它接受四个字符的组合:'E'(元素)、'A'(属性)、'C'(类名)和'M'(注释)。默认值为'A'...

    AngularJS封装jQuery Datepicker

    - **指令封装**:AngularJS 的强大之处在于其自定义指令的能力。通过创建一个新的指令,我们可以将jQuery Datepicker的功能整合到AngularJS的环境中。这个指令通常会监听元素的变化,然后触发Datepicker的显示和隐藏...

    关于Angularjs中自定义指令一些有价值的细节和技巧小结

    - `require`: 定义指令依赖的其他指令,可以是一个字符串或数组,用于在`link`或`compile`函数中访问这些依赖的指令。 - `link`和`compile`: `link`函数在指令实例化时运行,常用于DOM操作和数据绑定。`compile`...

    Angular-Project-Add-Directive:如何在 AngularJS 中使用指令

    1. **理解AngularJS指令** AngularJS中的指令是扩展HTML的一种方式,通过指令,我们可以为HTML元素添加新的行为或改变其表现。例如,`ngRepeat`指令用于循环遍历数据,`ngClick`用于响应点击事件。指令分为内置指令...

    AngularJS自定义指令详解(有分页插件代码)

    `require`属性则指定了指令需要依赖的其他指令,比如`require: '^ngModel'`表示当前指令需要`ngModel`指令作为父指令。 最后,`link`和`compile`函数都是用来操作DOM的。`link`函数在编译完成后执行,通常用于添加...

Global site tag (gtag.js) - Google Analytics