详解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入门基础 document.write输出
Feb 22 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
artDialog+plupload实现多文件上传
Jul 19 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
基于JavaScript实现瀑布流布局
Aug 15 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
Feb 12 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
浅谈vue 锚点指令v-anchor的使用
Nov 13 Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 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
加强版phplib的DB类
2008/03/31 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
python远程登录代码
2008/04/29 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python实现手绘图效果实例分享
2020/07/22 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
旅游管理毕业生自荐信
2013/11/05 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
房产委托公证书
2014/04/08 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
初中教师个人总结
2015/02/10 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
python字符串的多行输出的实例详解
2021/06/08 Python