AngularJS中scope的绑定策略实例分析


Posted in Javascript onOctober 30, 2017

本文实例讲述了AngularJS中scope的绑定策略。分享给大家供大家参考,具体如下:

当scope选项写为scope:{ }这种形式的时候,就已经为指令生成了隔离作用域,指令的模板就无法访问外部作用域了:

具有隔离作用域的指令最主要的使用场景是创建可复用的组件,组件可以在未知上下文中使用,并且可以避免污染所处的外部作用域或不经意地污染内部作用域。

现在,我们来看看绑定策略的三种形式: @、= 、&

1. @

本地作用域属性:使用@符号将本地作用域同DOM属性的值进行绑定。指令内部作用域可以使用外部作用域的变量:

@ (or @attr)

把当前的属性作为字符串传递。你还可以绑定来自外层的scope的值,在属性值中插入{{ }}即可。什么意思呢?说的简单一点就是假设你在模板中有个双花括号表达式,然后我们把表达式里的内容和html中指令里特定名字的属性绑定起来:

<div ng-controller="nameController">
  <direct for-name="{{ Name }}"></direct>
<div>
directive("direct",function(){
    return{
      restrict: 'A',
      template: '<div>指令中:{{ name }}</div>',
      scope:{
       name:'@forName'
      }
     }
 })
.controller("nameController",function($scope){
   $scope.Name="张三";
});

2. =

与父scope中的属性进行双向绑定

@是针对字符串(准确来说是表达式expression)而用,但=是针对某个对象的引用;

<div ng-controller="nameController">
  <direct case="data[0]"></direct>
  <direct case="data[1]"></direct>
<div>
directive("direct",function(){
    return{
      restrict: 'ECMA',
      template: '<div>指令中:{{ case.name }}</div>',
      scope:{
       case:'='
      }
     }
 })
.controller("nameController",function($scope){
   $scope.data=[{name:"张三"},{name:"李四"}];
});

data是一个对象数组,里面包含了两个对象,所以,我们分别把两个对象传递给了case这个属性,case属性就把这个对象的引用传递给了模板中我们写的{{ case.name }}中的case;而如果你在=后边加上了自己定义的名字,那只要把html里case属性换成那个名字就可以了。

3. &

传递来自父scope中的函数、稍后调用

它的含义是:对父级作用域进行绑定,并将其中的属性包装成一个函数,注意任何类型的属性都会被包装成一个函数,比如一个单纯的字符串,或是一个对象数组,或是一个函数方法。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
学习javascript,实现插入排序实现代码
Jul 31 Javascript
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
node.js中的http.response.setHeader方法使用说明
Dec 14 Javascript
JavaScript动态检验密码强度的实现方法
Nov 09 Javascript
基于Node.js的WebSocket通信实现
Mar 11 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
Angular数据绑定机制原理
Apr 17 Javascript
js正则取值的结果数组调试方法
Oct 10 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
Mar 11 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
node+multer实现图片上传的示例代码
Feb 18 Javascript
JavaScript数组push方法使用注意事项
Oct 30 #Javascript
JavaScript Date对象应用实例分享
Oct 30 #Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 #Javascript
Angularjs按需查询实例代码
Oct 30 #Javascript
Vue中正确使用jQuery的方法
Oct 30 #jQuery
ES6 javascript中Class类继承用法实例详解
Oct 30 #Javascript
轻松理解vue的双向数据绑定问题
Oct 30 #Javascript
You might like
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
js实现随机抽奖
2020/03/19 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
python3 使用traceback定位异常实例
2020/03/09 Python
如何让python的运行速度得到提升
2020/07/08 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
护理学专业推荐信
2013/12/03 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
优质服务标语口号
2015/12/26 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android