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 相关文章推荐
js表数据排序 sort table data
Feb 18 Javascript
jQuery 常见操作实现方式和常用函数方法总结
May 06 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
jQuery模拟select实现下拉菜单功能
Jun 20 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
Dec 23 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
Nov 03 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
Feb 26 Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 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
PHP 高手之路(一)
2006/10/09 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
react+redux的升级版todoList的实现
2017/12/18 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
python 将字符串转换成字典dict
2013/03/24 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
python dlib人脸识别代码实例
2019/04/04 Python
python里运用私有属性和方法总结
2019/07/08 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
python绘制玫瑰的实现代码
2020/03/02 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
python excel和yaml文件的读取封装
2021/01/12 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
酒店前厅员工辞职信
2014/01/08 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
创业计划书之服装
2019/10/07 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers