自定义指令-directive (转)
1、指令作用域中的@
作用是把当前属性作为字符串传递。
前台代码:
<div ng-controller="MyCtrl">
<drink water="{{pureWater}}"></drink>
</div>
Js代码:
<script type="text/javascript">
var myModule = angular.module("MyModule",[]);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.pureWater = "纯净水";
}]);
myModule.directive("drink",function(){
return {
restrict: 'AE',
scope:{
water:'@'
},
template: "<div>{{water}}</div>"
}
});
</script>
执行结果:

(1)HTML页面中,声明一个标签<drink></drink>,其中定义一个属性名:water 属性值:pureWater
(2)JS文件中,首先从模块开始,然后创建一个控制器,再定义一个指令,主要实现的是将"<drink></drink>"替换为"<div>{{water}}</div>"标签显示
(3)重点介绍这里的
scope:{
water:'@'}该表达式等价于:
link:function(scope,element,attrs){
scope.water=attrs.water; }具体含义就是在指令的scope上定义一个属性名:water,它的值就是前台界面中water属性的值,也就是"{{pureWater}}";
同时{{pureWater}}的值我们从声明的控制器可以看出:$scope.pureWater="纯净水";
所以最终页面显示的是“纯净水”,主要的流程就是:
a.在指令中,通过@实现指令与HTML页面元素关联;
b.在控制器中又实现了与页面的联系;
c.从而借助HTML页面建立起控制器与指令的联系,也是一种通讯方式。
具体见下图:

2、指令作用域中的=
作用是与父scope中的属性进行双向绑定。
<div ng-controller="MyCtrl">
Ctrl:
<br/>
<input type="text" ng-model="pureWater">
<br/>
Directive:
<br/>
<drink water="pureWater"></drink>
</div>
Js代码:
<script type="text/javascript">
var myModule = angular.module("MyModule",[]);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.pureWater = "纯净水";
}]);
myModule.directive("drink",function(){
return {
restrict: 'AE',
scope:{
water:'='
},
template: "<input type="text" ng-model="water" />"
}
});
</script>
这里=的手段类似,通过页面设置两个输入框,分别代表指令和控制器的作用域,在JS代码实现了双向绑定,做到了控制器与指令在各自作用域内能够影响对方,也就是双向通信,具体思路与@类似,不赘述,上图:

3、指令作用域中的&
主要作用是传递一个来自父scope的函数,稍后调用。
<div ng-controller="MyCtrl">
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
</div>
js代码
<script type="text/javascript">
var myModule = angular.module("MyModule",[]);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.sayHello = function(name){
alert("hello" + name);
}
}]);
myModule.directive("greeting",function(){
return {
restrict: 'AE',
scope:{
greet:'&'
},
template: '<input type="text" ng-model="userName" /><br/>' +
'<button class="btn btn-default" ng-click="greet({name:userName})">Greeting</button><br/>'
}
});
</script>
从页面可以看出,这里定义了一个标签<greeting></greeting>,并在其中定义了属性名greet,与上面的@以及=不同的是,属性名后面是一个方法,所以,这里的&主要用于在Controller和directive之间传递函数,实现两者之间的函数通信,在JS中,将前台的greeting标签替换为template中的内容,一个输入框加上一个按钮,按钮上绑定了greet函数,与前台页面的greet相呼应,而前台的greet函数在控制器中有定义,所以指令中也是调用的控制器中的greet函数。执行结果如下:
(1)初始界面

(2)在第一个文本框填值

(3)在第二个文本框填值

(4)在第三个文本框中填值

转自:http://www.cnblogs.com/bigdataZJ/p/AngularJS1.html
自定义指令-directive (转)的更多相关文章
- angularjs - 自定义指令(directive)
自定义指令(directive) 使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名. 例子:使用驼峰法来命名一个指令, demoDirect ...
- vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)
一.自定义指令directive 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的 ...
- angularjs自定义指令Directive
今天学习angularjs自定义指令Directive.Directive是一个非常棒的功能.可以实现我们自义的的功能方法. 下面的例子是演示用户在文本框输入的帐号是否为管理员的帐号"Adm ...
- Vue input 控件: 通过自定义指令(directive)使用正则表达式限制input控件的输入
前言: 网站中的input输入框使用非常广泛,因业务场景不同需要对输入框做合法性校验或限制输入,比如电话号码.邮件.区号.身份证号等.input框的不合法内容主要有两种方式处理:1.用户输入内容后,通 ...
- angular 自定义指令 directive transclude 理解
项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象 ...
- Angular自定义指令directive:scope属性
在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令.自定义指令,是为了扩展DOM元素的功能.代码中,通过指定directive中的restrict属性,来决定这个指令是作为 ...
- 自定义指令directive
1.自定义指令 在angular中,module下面的directive方法用于创建自定义指令,用法: m1.directive('myTab',function(){ return { restri ...
- angularJs自定义指令.directive==类似自定义标签
创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名 ...
- vue.js实现内部自定义指令和全局自定义指令------directive
在Vue中,我们平时数据驱动视图时候,内部自带的指令有时候解决不了一些需求,这时候,Vue给我们一个很好用的东东 directive 这个单词是我们写自定义指令的关键字哦 之定义指令为我们提供了几个钩 ...
- vue 自定义指令directive
//自定义指令:directive 的传参--可以数据也可以是字符串 Vue.directive('scroll', function (binding) { window.addEventListe ...
随机推荐
- MVC入口程序 | 简单调用及实例化
入口程序: 现在大多采用单一入口机制,单一入口就是指在一个web应用程序中,所有的请求都指向一个脚本文件.通俗点说就是一幢大楼只有一个大门入口可以进去... 目录: 建立一个控制器/模型/视图调用函数 ...
- SQL查询到的数据放到DataSet中
public DataTable GetTable(string Id) { StringBuilder strSql = new StringBuilder(); DataSet ds = new ...
- finnal 评论 II
新蜂团队:俄罗斯方块界面设计给人眼前一亮的感觉,很喜欢他们界面的颜色搭配.功能上实现了俄罗斯方块的基本功能,并且没有bug.最重要的是游戏有自己的创新点在里面,很喜欢游戏的瞄准功能.总的来说项目完成的 ...
- 移动web 公用样式
/*! normalize.css v3.0.2 | MIT License | github.com/necolas/normalize */ /** * 1. Set default font f ...
- mysql求最大第二,最大第三个数
题目是这样的: 集团有多个部门,部门下有多个员工,求每个部门绩效排名第二的人员 sql语句是这样的 SELECT dep, MAX(score) FROM zx WHERE score NOT IN ...
- 为什么匿名内部类的参数必须为finalhttp://feiyeguohai.iteye.com/blog/1500108
1) 从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自 ...
- Python强化训练笔记(五)——找出多个字典中的公共键
在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randin ...
- WebApp中的页面生命周期及路由管理
最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...
- C# DataTable分页处理
有时候我们从数据库获取的数据量太大,而我们不需要一次性显示那么多的时候,我们就要对数据进行分页处理了,让每页显示不同的数据. public DataTable GetPagedTable(DataTa ...
- 从Swift3的标准库协议看面向协议编程(一)
Swift中,大量内置类如Dictionary,Array,Range,String都使用了协议 先看看Hashable 哈希表是一种基础的数据结构.,Swift中字典具有以下特点:字典由两种范型类型 ...