详解angularJs指令的3种绑定策略


Posted in Javascript onApril 13, 2017

今天,我来谈谈angularJs指令的3种绑定策略。

公司最近大量使用angularJs做单页面应用,就免不了使用angularJs的一些组件,而有的组件网上有现成的,不必操心,而有的就得自食其力,先前对指令这一块的封装一直理解的不够,故每次使用directive时抽象性都做得不好,往往移植性很差,而要将抽象做好,就不得不使用指令中的隔离作用域,而光有隔离作用域又不能做好前后文的通信问题,要解决通信的问题,就要使用指令中的绑定,正好最近要用,顺便就整理了一些关于指令中的3种绑定策略,并谈了一些自己的理解。

angularJs中指令scope隔离域绑定有3种策略:如

.directive("abc",function(){
   return {
     scope:{          
        title:"@",      
        name:"=",      
        changeNum:"&"    
     } 
/* 出现了scope就表示这个指令的scope是独立的,但如果要与外界联系,就要使用绑定策略*/
/*使用@符号可将本地作用域的变量与DOM属性的值进行绑定,即我们通过@得到title属性的值*/
/*使用=符号可将本地作用域上的属性与父级作用域上的属性进行双向绑定,即我们通过=得到name的引用。可以同值传递和引用传递的理解相结合*/
/*使用&符号可以对父级作用域进行绑定,以便在其中运行函数,简单说就是绑定函数用的*/
   }
})

举一个详细的例子:

HTML:

<div ng-controller="test">
<div>AngularJs指令的三种绑定策略</div>
<example title="titleExample" name="nameExample" send-message="parentSendMessage('example')">
</example>
</div>

说明:example是自定义的指令,用以展示指令的三种绑定策略。

使用@来绑定title,以获取DOM中的属性值。

directive:
   myApp.directive("example",function(){
    return {
      restrict:"E",
      scope:{
        title:"@", 
      },
      link:function($scope,element,attrs){
        console.log($scope.title); ==> titleExample
      }
    } 
   })

说明:@绑定策略,可以将title值与父级作用域的值绑定,比如父级作用域有一个属性是testTitle,我们想将指令中的title属性的值与父级作用域中testTitle的值绑定,故我们可以在HTML将指令改写成<example title={{testTitle}}></example>,这样我们就可以在.directive中通过子作用域中的$scope.title获取到父级作用域$scope.testTitle的值。

使用=来绑定name,以将子作用域与父作用域的属性进行双向绑定。

directive:
   myApp.directive("example",function(){
    return {
      restrict:"E",
      scope:{
        name:"=",
      },
      link:function($scope,element,attrs){
        console.log($scope.name); ==> nameTest
      }
    }
   })
     
  //父级作用域的控制器
   controller:
   myApp.controller("test",function($scope){
     $scope.nameExample = "nameTest"
   })

说明:在实际生产中,这一绑定策略十分有效,譬如说,假定我在指令中要返回一个对象给父级作用域,这时通过“@"这一"值传递"方法已经不能满足需求了,此时就应该考虑"="这一"引用传递",因为通过name="nameExample"这一声明,就将子作用域的$scope.name与父作用域的$scope.nameExample绑定在一起,可以认为他们指向同一地址,不论修改哪个都会影响对方。

使用&来绑定sendMessage ,以将子作用域与父作用域的方法进行绑定。

directive:
   myApp.directive("example",function(){
    return {
      restrict:"E",
      scope:{
        sendMessage:"&",
      },
      link:function($scope,element,attrs){
      }
    }
   })

  //父级作用域的控制器
   controller:
   myApp.controller("test",function($scope){
     $scope.parentSendMessage = function(content){
        alert(content);
     }
   })

说明:可以看到"&"绑定就是让子作用域可以使用父级作用域中的方法,这样就可以利用父级作用域$scope.parentSendMessage ()中的一些数据进行运算,并将结果返回给子作用域$scope.sendMessage() 。

希望这篇浅见能对你了解指令隔离域的3种绑定策略有些许帮助!也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
不懂JavaScript应该怎样学
Apr 16 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
Bootstrap选项卡与Masonry插件的完美结合
Jul 06 Javascript
js实时获取窗口大小变化的实例代码
Nov 18 Javascript
使用vue构建移动应用实战代码
Aug 02 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
JavaScript cookie原理及使用实例
May 08 Javascript
js中延迟加载和预加载的具体使用
Jan 14 Javascript
js实现简单的倒计时
Jan 28 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 #Javascript
Vue组件tree实现树形菜单
Apr 13 #Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 #Javascript
Angularjs 动态添加指令并绑定事件的方法
Apr 13 #Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
Apr 13 #Javascript
JS传参及动态修改页面布局
Apr 13 #Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 #Javascript
You might like
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
有关php运算符的知识大全
2011/11/03 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python交易记录整合交易类详解
2019/07/03 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
Python自省及反射原理实例详解
2020/07/06 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
《鹬蚌相争》教学反思
2014/04/22 职场文书
幼儿园开学报名通知
2015/07/16 职场文书