Angular自定义指令directive:scope属性
在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令。自定义指令,是为了扩展DOM元素的功能。代码中,通过指定directive中的restrict属性,来决定这个指令是作为标签(E)、属性(A)、属性值(C)、还是注释(M)。
二、scope属性的3种取值:
说明:为了探究scope取值对指令的影响,这里举的例子中,自定义指令都是作为DOM的tag使用的,即restrict属性为“E”。指令的名称为“my-directive(myDirective)”。
1、false(默认值):直接使用父scope。比较“危险”。
可以理解成指令内部并没有一个新的scope,它和指令以外的代码共享同一个scope。例子:
(1)指令的定义,app.js:
app.directive('myDirective', function() {
return {
restrict: 'E',
replace: true,
templateUrl: '../templates/my_template_01.html',
scope: false, // 默认值
controller: null
}
});
(2)指令模板,my_template_01.html:
<div>
<!--这里ng-model绑定的input,就是父scope的变量input-->
<p>自定义指令scope:<input type="text" ng-model="input"></p> <p>结果:{{input}}</p>
</div>
(3)指令的使用,index.html:
<body ng-app="watchDemo" ng-controller="controller01">
<p>父scope:<input type="text" ng-model="input"></p> <!--自定义指令-->
<my-directive></my-directive>
</body>
(4)效果:
可以看到,因为是同一个scope,所以无论是改变my-directive里面还是外面的输入框中的文字,都会改变这个scope中的“input”的值。
2、true:继承父scope
(1)指令的定义,app.js:
app.directive('myDirective', function() {
return {
restrict: 'E',
replace: true,
templateUrl: '../templates/my_template_01.html',
scope: true, // 只是改动了这里
controller: null
}
});
(2)指令模板,my_template_01.html:
<div>
<!--这里绑定的同名的input,在继承的(子)scope中-->
<p>自定义指令scope:<input type="text" ng-model="input"></p> <p>结果:{{input}}</p>
</div>
(3)指令的使用,index.html,没有变动:
<body ng-app="watchDemo" ng-controller="controller01">
<p>父scope:<input type="text" ng-model="input"></p> <!--自定义指令-->
<my-directive></my-directive>
</body>
(4)效果:
一开始是绑定在父scope中,但当修改位于自定义指令中的输入框时,子scope就被创建并继承父scope了。之后,修改父scope并不能影响input的值,而修改子scope就可以改变input的值了。如图:
3、{ }:创建一个新的“隔离”scope,但仍可与父scope通信
隔离的scope,通常用于创建可复用的指令,也就是它不用管父scope中的model。然而虽然说是“隔离”,但通常我们还是需要让这个子scope跟父scope中的变量进行绑定。绑定的策略有3种:
- @:单向绑定,外部scope能够影响内部scope,但反过来不成立
- =:双向绑定,外部scope和内部scope的model能够相互改变
- &:把内部scope的函数的返回值和外部scope的任何属性绑定起来
(1)@:单向绑定
示例代码:
<body ng-app="watchDemo">
<!--外部scope-->
<p>父scope:<input type="text" ng-model="input"></p>
<!--内部隔离scope-->
<my-directive my-text="{{input}}"></my-directive> <script>
var app = angular.module('watchDemo', []);
app.directive('myDirective', function () {
return {
restrict: 'E',
replace: true,
template: '<p>自定义指令scope:<input type="text" ng-model="myText"></p>',
scope: {
myText: '@'
}
}
});
</script>
</body>
效果:
(2)=:双向绑定
示例代码:
<body ng-app="watchDemo">
<!--外部scope-->
<p>父scope:<input type="text" ng-model="input"></p> <!--内部隔离scope-->
<!--注意这里,因为是双向绑定,所以这里不要“{{}}”这个符号-->
<my-directive my-text="input"></my-directive> <script>
var app = angular.module('watchDemo', []);
app.directive('myDirective', function () {
return {
restrict: 'E',
replace: true,
template: '<p>自定义指令scope:<input type="text" ng-model="myText"></p>',
scope: {
myText: '=' // 这里改成了双向绑定
}
}
});
</script>
</body>
效果:
(3)&:内部scope的函数返回值和外部scope绑定
示例代码:
<body ng-app="watchDemo">
<!--外部scope-->
<p>父scope:<input type="text" ng-model="input"></p> <!--内部隔离scope-->
<!--注意这里,函数名字也要用 连字符命名法-->
<my-directive get-my-text="input"></my-directive> <script>
var app = angular.module('watchDemo', []);
app.directive('myDirective', function () {
return {
restrict: 'E',
replace: true,
template: '<p>结果:{{ getMyText() }}</p>',
scope: {
getMyText: '&' // 这里改成了函数返回值的绑定
}
}
});
</script>
</body>
效果:
Angular自定义指令directive:scope属性的更多相关文章
- angular 自定义指令 directive transclude 理解
项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象 ...
- Angular自定义指令(directive)
angular自定义指令,意我们可以通过angula自己定义指令,来实现我们的特殊要求,为所欲为,一支穿云箭,千军万马来相见 多少年的老规矩了,先看代码: <!DOCTYPE html> ...
- angular 自定义指令详解 Directive
在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足 ...
- Angular之指令Directive系列
项目筹备近期开启Angular学习,指令比较难理解所以记录备案,推荐Angualr实战学习视频大漠穷秋 Angular实战 一.指令directive概述 指令可以对元素绑定事件监听或者改变DOM结构 ...
- angularjs - 自定义指令(directive)
自定义指令(directive) 使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名. 例子:使用驼峰法来命名一个指令, demoDirect ...
- angularjs自定义指令Directive
今天学习angularjs自定义指令Directive.Directive是一个非常棒的功能.可以实现我们自义的的功能方法. 下面的例子是演示用户在文本框输入的帐号是否为管理员的帐号"Adm ...
- vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)
一.自定义指令directive 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的 ...
- Vue input 控件: 通过自定义指令(directive)使用正则表达式限制input控件的输入
前言: 网站中的input输入框使用非常广泛,因业务场景不同需要对输入框做合法性校验或限制输入,比如电话号码.邮件.区号.身份证号等.input框的不合法内容主要有两种方式处理:1.用户输入内容后,通 ...
- AngularJS自定义指令directive:scope属性 (转载)
原文地址:http://blog.csdn.net/VitaLemon__/article/details/52213103 一.介绍: 在AngularJS中,除了内置指令如ng-click等,我们 ...
随机推荐
- Python作业 1
用户有三次机会登录,登录成功,显示欢迎界面. 三次登录失败,账户被锁定,下次登录失败. 思路: 1:流程控制:for或者while循环,达到三次检测目的. 2:文件操作. 检测文档,一旦发现输入账户名 ...
- 简单讲解MVC(视图/模型/控制器)
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...
- Eclipse 代码格式:“{ }”的格式设置
Eclipse设置代码大括号的格式 编写代码有很多中风格,常见的三种风格: 1.K & R风格:这种风格的代码比较紧凑,优点是在教科书或者打印成纸张的时候比较省地方:缺点是大括号匹配问题,代码 ...
- python 给定n,返回n以内的斐波那契数列
方式一:函数 def fabs(n): a, b = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b fabs(1000) 方式二:列表 re ...
- web项目总结——通过jsp+servlet实现对oracle的增删改查功能
1.DAO模式 分包:依次建立 entity:实体包,放的是跟oracle数据库中表结构相对应的对象的属性,也就是这个对象有什么 dao:增删改查接口,实现增删改查的具体方法 service:同dao ...
- Python进阶(三)--global和类属性
global关键字 一句话概括为:告诉python解释器,global声明的变量为全局作用域内定义的变量.解释器就会到全局作用域内寻找global定义的变量. python的类属性 类属性相当于其他O ...
- Sublime Text 3插件安装
自动安装: 1.通过快捷键 ctrl+` 或者 View > Show Console 菜单打开控制台 2.粘贴对应版本的代码后回车安装 适用于 Sublime Text 3: import ...
- AngularJS小知识点一
AngularJS是由谷歌公司及一个由开发者组成的个人社区共同打造.其主要优势在于帮助使用者在web应用程序中实现必要的动态视图.它是通过原生的MVC(模型-视图-控制器)功能来增强HTML. PS: ...
- 【转】linux中do{...} while(0)的解释
在看ldlm的代码过程中遇到了一个很奇怪的问题,有很多宏定义使用了do while(0)这种看起来好像没啥用的代码.然后我就问问师兄,才得知,这种用法很常见,自己又查了一下资料,原来在linux内核代 ...
- android Glide图片加载框架的初探
一.Glide图片加载框架的简介 谷歌2014年开发者论坛会上介绍的图片加载框架,它让我们在处理不管是网路下载的图片还是本地的图片,减轻了很多工作量, 二.开发步骤: 1.添加链接库 compile ...