AngularJS笔记--自定义指令
在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件。AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板。提供给前台html调用.
一. 指令的简单定义.
下面定义了一个简单的控件,点击后调转到博客园。
Note: 1.命名方式:directive必须以小写字母开头,其中如果后面由大写字母,html调用的时候就要用 - 将单词分开.
<html>
<script src='angular.js'></script>
<script type="text/javascript">
angular.module('myapp',[])
.directive('myCnblogs',function(){
return {
restrict: 'E',
replace: false,
template:'<a href="http://www.cnblogs.com/">Go to cnblogs</a>'
}
})
</script>
<head>
<title></title>
<div ng-app='myapp'>
<my-Cnblogs></my-Cnblogs>
</div>
</head>
<body>
</body>
</html>
二.指令元素介绍:
2.1 restrict
常用的restrict有E,A,C三种设置。这些设置可以混用,比如EA,AC。不需要符号隔开
E(Element):元素,使用格式是<my-directive></my-directive>
A(Propertity): 属性,使用格式:<div my-directive></div>
C(Class): 类, 使用格式:<div class='my-directive'></div>
2.2 repleace
下面是Replace分别设置false和True的效果


2.3 termplate:
template 是设置对应的html模板, 如果有html换行那就要在每一句末尾加上 / 符号. 如果html代码较多,可以通过设置templateurl: urlpath,来加载对应当的代码模板
三. 向指令内部添加数据
3.1 下面通过设置scope简单的实现了数据的绑定.
<!DOCTYPE html>
<html>
<script src='angular.js'></script>
<script type="text/javascript">
angular.module('myapp',[])
.directive('myDirective', function() {
return {
restrict: 'A',
replace: true,
scope:{
myurl:"@",
mycontent:"@"
},
template: '<a href="{{myurl}}">{{mycontent}}</a>'
};
});
</script>
<head>
<title></title>
<div ng-app='myapp'>
<div my-Directive myurl='http://www.cnblogs.com/' mycontent='go to blogs'></div>
</div>
</head>
<body>
</body>
</html>
3.2 深入理解自定义控件scope的绑定
自定义控件绑定$scope分为 @,=,& 三种情况。个人认为@:单向绑定,=:双向绑定,&: 用于绑定函数,下面看看Angularjs权威指南的介绍
@ 本地作用域属性:使用@符号将本地作用域同DOM属性的值进行绑定。
= 双向绑定:通过=可以将本地作用域上的属性同父级作用域上的属性进行双向的数据绑定。 就像普通的数据绑定一样,本地属性会反映出父数据模型中所发生的改变
& 父级作用域绑定 通过&符号可以对父级作用域进行绑定,以便在其中运行函数。意味着对这个值进行设置时会生成一个指向父级作用域的包装函数.
下面的demo实现了对三种情况的绑定.
<!DOCTYPE html>
<html>
<script src='angular.js'></script>
<script type="text/javascript">
angular.module("myApp", [])
.directive("myDir", function() {
return {
restrict: "A",
scope: {
name: "@",
desc: "=",
show: "&"
},
template:
"<div>" +
" <input type='text' ng-model='name' />: <input ng-model='desc' />" +
" <button ng-click='show()'>show</button>" +
"</div>",
replace: true,
link: function (scope, element, attrs) {
console.log("initial value for name:" + scope.name);
console.log("initial value for description:" + scope.amount);
scope.$watch("desc", function (newVal, oldVal) {
console.log("desc has changed " + oldVal + " >> " + newVal);
});
scope.$watch("name", function (newVal, oldVal) {
console.log("name has changed " + oldVal + " >> " + newVal);
});
}
}
})
.controller("myCtrl", function($scope) {
$scope.customerName = "Frank";
$scope.content = 'Learning Angular';
$scope.show = function(source) {
alert(source);
};
}) </script>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body ng-app="myApp" ng-controller="myCtrl"> <h3>普通的Angular</h3>
<input type="text" ng-model='customerName'>: <input ng-model="content" />
<button ng-click="show('普通函数')">show</button> <h3>自定义指令</h3>
<div my-dir
name="{{customerName}}"
desc="content"
show="show('自定义指令绑定函数')">
</div>
</body>
</html>
下面是效果图:

四. 总结:
本篇章介绍了自定义指令的简单实用. 可以通过自定义指令封装很多特定功能的html模板,供页面调用。 大家可以试一试将上面demo的 & 修改为 @或者=,经测试修改为@符号,自定义指令的show方法 是无法执行的。如果修改为=号就很有意思了。点击上面的btn,会执行两次show方法。 然后修改任何一个input,下面的show方法都会被执行。如果有博友知道是什么原因也请在线回复一下。这个原理实在 不清楚是什么原因。
AngularJS笔记--自定义指令的更多相关文章
- 带你走近AngularJS - 创建自定义指令
带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...
- 走进AngularJs(五)自定义指令----(下)
自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定 ...
- 走进AngularJs(三)自定义指令-----(上)
一.有感而发的一些话 在学习ng之前有听前辈说过,angular上手比较难,初学者可能不太适应其语法以及思想.随着对ng探索的一步步深入,也确实感觉到了这一点,尤其是框架内部的某些执行机制,其复杂程度 ...
- angularJS中自定义指令
学习了angularJS一周,但是大部分时间被自定义指令占用了.博主表示自学互联网好心塞的,发现问题的视觉很狭窄,这比解决问题要更难.这篇文章首先介绍了自定义,然后介绍了在使用自定义指令遇到的问题. ...
- 走进AngularJs(四)自定义指令----(中)
上一篇简单介绍了自定义一个指令的几个简单参数,restrict.template.templateUrl.replace.transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没 ...
- angularJS 使用自定义指令输出模板
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- angularjs Directive自定义指令详解
作用:需要用Directive有下面的情景: 1.使你的Html更具语义化,不需要深入研究代码和逻辑即可知道页面的大致逻辑. 2. 抽象一个自定义组件,在其他地方进行重用. 3.使用公共代码,减少重复 ...
- Angular 学习笔记——自定义指令之间的交互
<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...
- Angular 学习笔记——自定义指令
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
随机推荐
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
[源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...
- HTTP协议详解
Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...
- 51nod 算法马拉松18 A 染色问题
染色问题 基准时间限制:1 秒 空间限制:10240 KB 分值: 40 一个n(3<=n<=100)个点的完全图,现在给出n,要求将每条边都染上一种颜色k(1<=k<=n), ...
- python基础之数据类型(一)
Python3 数字(Number) 定义:a=1 特性: 1.只能存放一个值 2.一经定义,不可更改 3.直接访问 分类:整型,长整型,布尔,浮点,复数 python2.*与python3.*关于整 ...
- javascript的列表切换
演示地址:http://wjf444128852.github.io/demo/Carousel/index.html IE兼容性没处理,确切的说不太会,还望指点一二 思路: 1.js获取要给定点击事 ...
- CSS项目学习总结
1.我过去在HTML和CSS阶段是如何学习的? 我一开始学HTML和CSS,更多的是通过看视频.书籍,一个知识点一个知识点地去学习,很少把他们串联起来,看代码多于敲代码. 然而,通过现在这几个项目的实 ...
- js => ES6一个新的函数写法
今天在网上参观到一个写法,返回字符串个个字母的个数 var arr='aaabbccaa'; var info = arr.split('').reduce((p, k) => (p[k]++ ...
- jquery实现表格的搜索功能
版权声明:作者原创,转载请注明出处! HTML代码如下: <input type="text" id="txt" value="" / ...
- js严格模式总结
首先,我们要理解严格模式的概念,严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,病增强安全性.可以对部分函数进行执行严格模式,如: function func(){ 'us ...
- ArcGIS10.2.2 Desktop直接连接数据库的具体步骤
ArcGIS10.2.2 Desktop直接连接数据库的具体步骤,以sqlserver2008R2和oracle11G数据库为例子,这里数据库的具体安装步骤不说了,不在讨论的范畴之内. 假如数据库软件 ...