Angular的自定义指令以及实例

http://www.cnblogs.com/xiaoxie53/p/5058198.html
前面的文章介绍了很多angular自带的指令,下面我们看看如何使用directive自定义指令。
先看一个例子:

<body>
<div my-hello></div>
</body> <script type="text/javascript">
var m1 = angular.module('myApp',[]);
m1.directive('myHello',function(){
return {
restrict : 'A',
replace : true,
template : '<div>hello angular</div>'
};
});
</script>

1:我们定义了一个my-hello的指令。
2:使用directive完善这个指令,返回一个对象。有三个值:
a) :restrict共四个值:E:标签指令,C:class指令,M:注释指令,A:属性指令
如何使用 ?

b):replace是否替换(M注释必须为true才能解析)看图:
true:
false:
c):template内容,除此之外还有templateUrl,指定一个html模板文件。
下面再举个例子:

<div ng-controller="Aaa">
<div my-tab my-id="div1" my-name="name" my-fn="show(num)" class="J-tab"></div>
<div my-tab my-id="div2" my-name="name" my-fn="show(num)" class="J-tab"></div>
</div>
<script type="text/javascript"> var m1 = angular.module('myApp',[]); m1.controller('Aaa',['$scope',function($scope){
$scope.name = 'xiecg';
$scope.age = 18;
$scope.show = function(num){
console.log(num);
};
}]); m1.directive('myTab',function(){
return {
restrict : 'ECMA',
replace : true, //替换的方式插入内容//绑定策略
scope : {
myId : '@', //解析普通字符串
myName : '=', //解析数据
myFn : '&' //函数
},
controller : ['$scope',function($scope){
//共享数据存放在这里
$scope.name = 'this is a xiecg';
}],
template : '<div id="{{myId}}">\
<input type="button" value="1" class="active" ng-click="myFn({num:456})">\
<input type="button" value="2">\
<input type="button" value="3">\
<div style="display:block;">{{myName}}</div>\
<div>2222</div>\
<div>3333</div>\
</div>'
};
}); </script>

1:scope默认是false,为true表示独立作用域。
2:scope给予一个对象时,表示执行绑定策略,在template上调用这些数据。
a):我们在DOM元素上my-id,我们使用@符号,表示解析普通字符串,说白了就是你写什麽就是什麽。
b):使用=符号,表示解析数据。
c):使用&符号,表示这绑定一个函数。
3:controller,表示绑定指令内部使用的数据。

好,下面来继续完善这个tab切换的例子!
完整代码:

<!DOCTYPE HTML>
<html ng-app="myApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tab选项卡实例</title>
<style type="text/css">
.J-tab .active{background-color:#03A9F4;}
.J-tab div{display:none;}
</style>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
</head>
<body> <div ng-controller="Aaa">
<my-tab my-id="div1" my-data="sports" class="J-tab"></my-tab>
<my-tab my-id="div2" my-data="time" class="J-tab"></my-tab>
</div> <script type="text/javascript"> var m1 = angular.module('myApp',[]);
m1.controller('Aaa',['$scope',function($scope){
$scope.sports = [
{title : '篮球',content : '111111111'},
{title : '足球',content : '222222222'},
{title : '排球',content : '333333333'}
];
$scope.time = [
{title : '上午',content : '444444444'},
{title : '中午',content : '555555555'}
];
}]); m1.directive('myTab',function(){
return {
restrict : 'E',
replace : true,
scope : {
myId : '@',
myData : '='
},
controller : ['$scope',function($scope){
$scope.name = 'this is a xiecg';
}],
template : '<div id="{{myId}}">\
<input ng-repeat="data in myData" type="button" ng-value="data.title" ng-class="{active:$first}">\
<div ng-repeat="data in myData" ng-style="{display:$first?\'block\':\'none\'}">{{data.content}}</div>\
</div>',
link : function(scope,element,attr){
element.on('click','input',function(){
var self = $(this) , i = self.index();
self.addClass('active').siblings('input').removeClass('active');
self.siblings('div').eq(i).show().siblings('div').hide();
});
}
};
}); </script>
</body>
</html>

link属性,表示当directive被angular编译后,执行该方法。这个方法接受三个参数,
a):scope表示controller下面的数据。
b):element表示当前的DOM元素。
c):attr表示这个DOM元素上的自定义属性。
补充:
在实际的开发过程中我们往往需要嵌套各种组件和指令。下面来介绍directive中的transclude和require。

<!DOCTYPE HTML>
<html ng-app="myApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>自定义指令间的互相交互</title>
<script type="text/javascript" src="js/angular.min.js"></script>
</head>
<body> <div>
<hello>
<hi></hi>
</hello>
</div> <script type="text/javascript"> var m1 = angular.module('myApp',[]); m1.directive('hello',function(){
return {
restrict : 'E',
replace : true,
transclude : true, //允许自定义指令的嵌套,通过ng-transclude指定嵌套的范围
controller : function($scope){
$scope.name = 'xiecg';
this.name = 'xiecg'; //使用this共享给其他指令
},
template : '<div>hello angular <h1 ng-transclude></h1></div>'
};
}); m1.directive('hi',function(){
return {
restrict : 'E',
replace : true,
require : '^hello',//hello指令属性hi指令的父级,需要用^符号指定。如果无法指定,使用?容错处理。
template : '<span>hi angular {{name}}</span>',
link : function(scope,element,attr,reController){
console.log(reController); //得到父级hello指令中共享出来的数据
}
};
}); </script>
</body>
</html>

Angular的自定义指令以及实例的更多相关文章
- angular directive自定义指令
先来看一下自定义指令的写法 app.directive('', ['', function(){ // Runs during compile return { // name: '', // pri ...
- angular js 自定义指令
我们有些时候需要把后台返回过来的带有html标签的字符串binding到界面中一个指定的div或者其他的控制器中. 使用普通ng-bind不会自动解析出html语句. js中这样定义: app.dir ...
- -_-#【Angular】自定义指令directive
AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta chars ...
- angular中关于自定义指令——repeat渲染完成后执行动作
业务中有时需要在异步获取数据并用ng-repeat遍历渲染完页面后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己动手写.有经验的同学都应该知道,在ng-r ...
- Angular.js之自定义指令学习笔记
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 在angular7中创建组件/自定义指令/管道
在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...
- 在vue中创建自定义指令
原文:https://dev.to/ratracegrad/creating-custom-directives-in-vue-58hh 翻译:心上有杨 指令是带有 v- 前缀的特殊属性.指令的作用是 ...
- Angular17 Angular自定义指令
1 什么是HTML HTML文档就是一个纯文本文件,该文件包含了HTML元素.CSS样式以及JavaScript代码:HTML元素是由标签呈现,浏览器会为每个标签创建带有属性的DOM对象,浏览器通过渲 ...
- angular指令详解--自定义指令
自定义指令 directive()这个方法是用来定义指令的: angular.module('myApp', []) .directive('myDirective', function ($time ...
随机推荐
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- 在centos7(EL7.3 即 kernel-3.10.0-514.X )上安装BCM4312无线网卡驱动要注意的问题
我新装的centos7主机无法使用里面自带的网卡,查询后发现网卡型号为BCM4312.我在看资料安装的过程中遇到了些问题,纠结了好久,现在分享下要注意的点,为后来的遇到同样问题的人提供点帮助.现在开始 ...
- centos 6 安装配置openvpn
下载地址:http://swupdate.openvpn.org/community/releases/http://www.oberhumer.com/opensource/lzo/download ...
- 使用win10远程控制ubuntu16.04
使用win10远程控制ubuntu16.04,网上很多需要安装xfce桌面的.今天介绍一下,不需要安装其他桌面,使用Ubuntu16.04自带桌面,漂亮美观. Ubuntu16.04端: 1.打开终端 ...
- Storm
2016-11-14 22:05:29 有哪些典型的Storm应用案例? 数据处理流:Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去.不像其它的流处理系统,Storm不 ...
- 将css和js缓存到localStorage缓存,提高网页响应速度
适用于小站点,这很极致,很快速~~ /** * Created by SevenNight on 2016/9/21 0021. * 插件功能:使用localStorage缓存js和css文件,减少h ...
- .NET基础拾遗(7)Web Service的开发与应用基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- java中文乱码解决之道(九)-----总结
乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...
- FASTDFS调研报告(V1.0)
之前的文章,现在放出来,以供参阅. 一.fastdfs简介 FastDFS是一个轻量级的开源分布式文件系统 FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 Fas ...
- salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中
项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...
AngularJS知识库