摘要

directive(指令)是angular的一个非常强大又有用的功能,它相当于实现了组件化的概念。我们可以通过它公共地自定义DOM元素或CLASS类或ATTR属性,并且在这基础上进行操作scope、绑定事件等等。将一些公共的模块或操作封装到指令中,然后就可以在html页面中编写简单的一行代码就可以加载整个公共模块,大大避免了代码的冗余。一般使用directive有以下场景:
下面我想通过一些实例结合分析对我所了解的directive进行一些简单的归纳总结(我所使用的是angular1.5.3):
一、Directive的使用
angular.module("app",[]).directive("directiveName",function(){
return{
//通过设置项来定义
};
})
二、一个简单的实例
html代码:
<!DOCTYPE html> <html ng-app='helloApp'> <body> <hello></hello> </body> <script src="js/angular.min.js"></script> <script src="js/helloDirective.js"></script> </html>
js代码:
var appModule = angular.module('helloApp', []);
appModule.directive('hello', function() {
return {
restrict: 'E',
template: '<div>Hello,friends!</div>',
replace: true
};
});
效果截图:
实例解析:
1、restrict:EACM的子集的字符串,它限制directive为指定的声明方式。
2、默认情况下,directive将仅仅允许通过属性声明,ECA较常用。
template:指令显示的模板内容,一般由html标签和文本组成。通常情况下html内容较简单的情况下使用,模板内容复杂的建议将公共部分抽离到html文件中,使用templateUrl属性。
templateUrl - 与template基本一致,但模版通过指定的url进行加载。因为模版加载是异步的,所以compilation、linking都会暂停,等待加载完毕后再执行。
3、replace:如果设置为true,那么模版将会替换当前元素,而不是作为子元素添加到当前元素中。(注:为true时,模版必须有一个根节点)
上述实例dom节点截图:
三、实例2:关于transclude
修改上面实例代码:
<!DOCTYPE html>
<html ng-app='helloApp' ng-controller="myController">
<body>
<hello>{{myName}}</hello>
</body>
<script src="js/angular.min.js"></script>
<script src="js/helloDirective.js"></script>
</html>
var appModule = angular.module('helloApp', []);
appModule.directive('hello', function() {
return {
restrict: 'E',
template: '<div>Hello,my name is <span ng-transclude></span></div>',
replace: true,
transclude:true
};
});
效果截图:
解析:
transclude:指令的作用是把我们自定义的语义化标签替换成浏览器能够认识的HTML标签。上述例子replace设置为true,模版将会替换当前元素。而transclude设置为true的作用可以简化地理解成:把<hello>标签替换成我们所编写的HTML模板,但是<hello>标签内部的内容保持不变。而<span ng-transclude></span>则是指明标签内部内容插入到模板内容的哪个位置。
四、实例3:关于compile,link和controller
实例代码:
phonecatDirectives.directive('exampleDirective', function() {
return {
restrict: 'E',
template: '<p>Hello {{number}}!</p>',
controller: function($scope, $element){
$scope.number = $scope.number + "22222 ";
},
link: function(scope, el, attr) {
scope.number = scope.number + "33333 ";
},
compile: function(element, attributes) {
return {
pre: function preLink(scope, element, attributes) {
scope.number = scope.number + "44444 ";
},
post: function postLink(scope, element, attributes) {
scope.number = scope.number + "55555 ";
}
};
}
}
});
//controller.js添加
dtControllers.controller('directive2',['$scope',
function($scope) {
$scope.number = '1111';
}
]);
//html
<body ng-app="phonecatApp">
<div ng-controller="directive2">
<example-directive></example-directive>
</div>
</body>
运行结果:
Hello 1111 22222 44444 55555!
由结果可以看出来,controller先运行,compile后运行,link不运行。
将上例中的compile注释掉的运行结果:
Hello 1111 22222 33333!
由结果可以看出来,controller先运行,link后运行,link和compile不兼容。
简单解析:
指令的控制器和link函数(后面会讲)可以进行互换。区别在于,控制器主要是用来提供可在指令间复用的行为但link链接函数只能在当前内部指令中定义行为,且无法再指令间复用。
更多了解可以参考Angular官方站点:https://angularjs.org/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular的directive
# angular
# directive
# angularjs
# 学习AngularJs:Directive指令用法(完整版)
# AngularJS中directive指令使用之事件绑定与指令交互用法示例
# AngularJS中的Directive自定义一个表格
# Angular之指令Directive用法详解
# AngularJs directive详解及示例代码
# 自定义
# 设置为
# 加载
# 将会
# 复用
# 情况下
# 我所
# 可以看出
# 就可以
# 的是
# 替换成
# 我想
# 在这
# 不需要
# 基础上
# 则是
# 我们可以
# 可在
# 绑定
# 大家多多
相关文章:
微信推文制作网站有哪些,怎么做微信推文,急?
如何在IIS7上新建站点并设置安全权限?
如何在腾讯云服务器快速搭建个人网站?
广德云建站网站建设方案与建站流程优化指南
网站制作难吗安全吗,做一个网站需要多久时间?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
建站ABC备案流程中有哪些关键注意事项?
建站上市公司网站建设方案与SEO优化服务定制指南
制作网页的网站有哪些,电脑上怎么做网页?
浅析上传头像示例及其注意事项
电商网站制作公司有哪些,1688网是什么意思?
,石家庄四十八中学官网?
西安大型网站制作公司,西安招聘网站最好的是哪个?
如何通过虚拟机搭建网站?详细步骤解析
如何快速搭建二级域名独立网站?
如何通过wdcp面板快速创建网站?
定制建站价位费用解析与套餐推荐全攻略
再谈Python中的字符串与字符编码(推荐)
定制建站流程步骤详解:一站式方案设计与开发指南
,南京靠谱的征婚网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
建站之星下载版如何获取与安装?
如何快速搭建高效香港服务器网站?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
建站之星安装后如何配置SEO及设计样式?
如何在阿里云虚拟服务器快速搭建网站?
建站主机如何选?高性价比方案全解析
网站网页制作专业公司,怎样制作自己的网页?
Python如何创建带属性的XML节点
建站主机选购指南与交易推荐:核心配置解析
北京建设网站制作公司,北京古代建筑博物馆预约官网?
如何快速生成凡客建站的专业级图册?
制作表格网站有哪些,线上表格怎么弄?
网页设计与网站制作内容,怎样注册网站?
如何用PHP工具快速搭建高效网站?
如何正确下载安装西数主机建站助手?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
详解jQuery停止动画——stop()方法的使用
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
制作网站的基本流程,设计网站的软件是什么?
如何快速重置建站主机并恢复默认配置?
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何在云主机上快速搭建多站点网站?
建站之星如何取消后台验证码生成?
*请认真填写需求信息,我们会在24小时内与您取得联系。