Angular的自定义指令以及实例
发布时间 - 2026-01-10 22:07:27 点击率:次前面的文章介绍了很多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.js自定义指令学习笔记实例
# Angularjs自定义指令实现三级联动 选择地理位置
# 详解angular2采用自定义指令(Directive)方式加载jquery插件
# AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
# AngularJS创建自定义指令的方法详解
# angularjs 表单密码验证自定义指令实现代码
# AngularJS使用自定义指令替代ng-repeat的方法
# AngularJS 自定义指令详解及实例代码
# 深入讲解AngularJS中的自定义指令的使用
# 详解AngularJS中自定义指令的使用
# Angular1.x自定义指令实例详解
# 自定义
# 绑定
# 如何使用
# 在这里
# 自带
# 说白了
# 先看
# 看图
# 需要用
# 选项卡
# 你写
# 过程中
# 举个例子
# 中午
# 上午
# 一个函数
# 在实际
# fn
# id
# html
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何在橙子建站中快速调整背景颜色?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何做网站制作流程,*游戏网站怎么搭建?
利用JavaScript实现拖拽改变元素大小
如何在阿里云通过域名搭建网站?
WEB开发之注册页面验证码倒计时代码的实现
如何用景安虚拟主机手机版绑定域名建站?
Laravel storage目录权限问题_Laravel文件写入权限设置
浅述节点的创建及常见功能的实现
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何在Ubuntu系统下快速搭建WordPress个人网站?
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
个人摄影网站制作流程,摄影爱好者都去什么网站?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何记录自定义日志?(Log频道配置)
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何在Windows服务器上快速搭建网站?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
焦点电影公司作品,电影焦点结局是什么?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel中的withCount方法怎么高效统计关联模型数量
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel Docker环境搭建教程_Laravel Sail使用指南
新三国志曹操传主线渭水交兵攻略
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
如何在IIS中新建站点并解决端口绑定冲突?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel怎么连接多个数据库_Laravel多数据库连接配置

