Angular自定义指令(directive)

angular自定义指令,意我们可以通过angula自己定义指令,来实现我们的特殊要求,为所欲为,一支穿云箭,千军万马来相见

多少年的老规矩了,先看代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
 7     <title>test</title>
 8 </head>
 9 <body ng-app="myApp">
10     <my-title></my-title>    //元素my-title
11     <div my-title></div>        //属性my-title
12     <div class="my-title"></div>//类my-title
13     <!-- directive: my-title -->//注释my-title(注意一定要加directive)
14 <script src="angular.min.js"></script>
15 <script>
16 var app = angular.module("myApp", [])
17
18 app.directive("myTitle", function(){ //myTitle与上面的my-title对应
19     return {
20         restrict: ‘ECMA‘,            //指令作用域,E表示作用于元素,C表示作用于类(class),M表示作用于注释,A表示作用于元素属性
21         template: ‘<h1>还有谁</h1>‘,  //模板,将模板内容显示在对应区域(按照restrict显示)22         replace: true            //用模板标签替换掉注释标签,使得注释内容能在网页内显示出来
24     }
25 })
26
27 </script>
28 </body>
29 </html>

如上,我们可以通过自定义指令,来渲染页面,当然自定义指令也可以加在控制器里,这时控制器作用域作为父作用域,如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
 7     <title>test</title>
 8 </head>
 9 <body ng-app="myApp">
10     <my-title></my-title>
11     <div my-title></div>
12     <div class="my-title"></div>
13     <!-- directive: my-title -->
14     <div ng-controller="myCtr">
15         <input type="text" ng-model="msg">
16         <p my-title msg-data="{{msg}}">{{msg}}</p>
17         <h1>{{msg}}</h1>
18     </div>
19
20 <script src="angular.min.js"></script>
21 <script>
22 var app = angular.module("myApp", [])
23 .controller(‘myCtr‘, function($scope){
24     $scope.msg = "德玛西亚";
25 })
26 .directive("myTitle",function(){
27     return {
28         restrict: ‘A‘,
29         controller: function($scope){
30             $scope.msg = "还有谁";
31         },
32         scope: true      //默认是false,表示其作用域和父作用域相同,当为true时表示他们有各自的作用域互不干扰
33     }
34 })
35
36 </script>
37 </body>
38 </html>

看上面代码,不难发现angularJS支持连缀,这是因为angular的方法会返回一个对象即上面的"app",所以其可以像jQuery一样连缀

scope还可以是一个对象,如:

1  template: ‘<em>{{msg}}</em>‘, //将父作用域msg变斜体后以模板的形式加载到子作用域23  scope: {
4            msg: ‘@msgData‘    //对应上面代码的msg-data,其功能是将子作用域msg指向父作用域msg,便于上一步中的模板加载操作
5        }

这样一来,子作用域的p标签也会渲染为 "德玛西亚"

通过上面分析,我们发现可不可以在自定义指令中自定义方法呢?答案是可疑的,那就是link闪亮登场的时候了,我的大刀早已饥渴难耐了!!!

代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
 7     <title>test</title>
 8 </head>
 9 <body ng-app="myApp">
10     <div repeat-num="3">我爱中华   //自定义指令,将div重复渲染3次
11
12     </div>
13
14 <script src="angular.min.js"></script>
15 <script>
16 var app = angular.module("myApp", []);
17
18 app.directive("repeatNum", function(){
19     return {
20         restrict: ‘A‘,
21         link: function(m,T,bc) {    //这三个参数是通过console.log(this);console.log(arguments);来查看的
22             var num = bc.repeatNum;  //获取上面repeat-num的值
23             console.log(this);
24             console.log(arguments);
25             for(var i = 0; i < num; i++){  //for循环实现多次渲染
26                 var cDom = T.clone();      //克隆div
27                 T.after(cDom);             //将克隆好的div加在现有的div之后
28             }
29         }
30
31     }
32 })
33
34 </script>
35 </body>
36 </html>        

如上图所示link方法共有5个参数其中三个是:m、T、bc,m表示作用域,T表示自定义指令作用的元素即div,bc表示其属性

当然了我们也可以对其子元素自定义操作,即多次渲染等,如下代码片段:

1 <div repeat-num="3">
2     <h1>我以为你不会选我呢</h1>
3 </div>
app.directive("repeatNum", function(){
    return {
        restrict: ‘A‘,
        link: function(m,T,bc) {
            var num = bc.repeatNum;
            var cDom = T.children();      //找到自定义指令操作元素的子节点
            for(var i = 0; i < num; i++){
                T.append(cDom.clone());    //将其子元素克隆并加入父元素
            }
        }
    }
})

上述即为自定义指令的用法,欢迎再次光临召唤师峡谷。

女士们、先生们,today is history, today we make history, today is part of history.

时间: 2024-10-25 23:10:12

Angular自定义指令(directive)的相关文章

angular 自定义指令 directive transclude 理解

项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象Demo: <!DOCTYPE html> <html lang="en" ng-app='myApp'> <head> <meta charset="UTF-8"> <title>Angularjs</

angular 自定义指令详解 Directive

在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足你的各种需求的指令. 本篇文章的参考来自  AngularJS权威指南 , 文章中主要介绍指令定义的选项配置 废话不多说,下面就直接上代码 //angular指令的定义,myDirective ,使用驼峰命名法 angular.module('myApp', []) .directive('myDi

Angular之指令Directive系列

项目筹备近期开启Angular学习,指令比较难理解所以记录备案,推荐视频大漠穷秋 Angular实战 由于篇幅过长,列举大纲如下: 一.指令directive概述 指令可以对元素绑定事件监听或者改变DOM结构而使HTML拥有像jQuery一样效果具有交互性.不同于jQuery,Angular设计核心思想是通过数据与模板的绑定,摆脱繁琐的DOM操作,而将注意力集中在业务逻辑上. 几种常见指令ng-app 指令用来指定ng的作用域是在那个标签以内部分(<html ng-app="myApp&q

AngularJS之基础-5 路由(定义路由、使用路由)、自定义指令(Directive)

一.定义路由 ng-view - AngularJS 支持通过在单页面上的多个视图的单页应用 - ng-view 标记只是简单地创建一个占位符 - 使用 ng-template - 创建使用script标签的HTML视图 - 使用 - 定义类型作为主模块中 ng-template 的脚本块 $routeProvider - 映射相应的HTML页面或ng-template - 附加一个控制器使用相同键的服务   - 注意: - 需要angular-route.js脚本文件的引用 二.使用路由 锚点

-_-#【Angular】自定义指令directive

AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta charset="utf-8"> <title></title> </head> <body> <script src="jquery-1.8.3.min.js"></script> <scrip

angular自定义指令命名的那个坑

Directive 先从定义一个简单的指令开始. 定义一个指令本质上是在HTML中通过元素.属性.类或注释来添加功能.AngularJS的内置指令都是以ng开头,如果想自定义指令,建议自定义一个前缀代表自己的命名空间.这里我们先使用my作为前缀: var myApp = angular.module('myApp', []) .directive('myDirective', function() { return { restrict: 'A', replace: true, template

angular 自定义指令 详解--restrict、restrict、replace

Angularjs 允许根据实际业务需要自定义指令, 通过angular全局对象下的 directive 方法实现.可以自定义属性.自定义标签.自定义功能 接下来定义一个名叫custom的指令,并利用这个自定义指令来实现元素的替换 html代码: <body ng-app="app"> <p custom></p> <custom></custom> js代码: var app = angular.module("a

自定义指令directive

1.自定义指令 在angular中,module下面的directive方法用于创建自定义指令,用法: m1.directive('myTab',function(){ return { restrict : 'AE', replace : true, templateUrl : '', }; }); 大致用法如上,在directive的第二个参数里面return出一个对象,对象里面有各种属性. restrict----指定创建的指令是什么类型,A--attr属性指令,E--element标签指

Angular17 Angular自定义指令

1 什么是HTML HTML文档就是一个纯文本文件,该文件包含了HTML元素.CSS样式以及JavaScript代码:HTML元素是由标签呈现,浏览器会为每个标签创建带有属性的DOM对象,浏览器通过渲染这些DOM节点来呈现内容,用户在浏览器中看到的内容就是浏览器渲染DOM对象后的结果. 2 指令的分类 组件.属性指令.结构性指令 具体的知识点请参见<Angular2揭秘> 3 指定义指令常用到的一些常量 3.1 Directive 用于装饰控制器类来指明该控制器类是一个自定义指令控制器类 3.