详解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的eval()中使用函数的进一步讨论
Jul 26 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
DOM基础教程之事件类型
Jan 20 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
详解JS面向对象编程
Jan 24 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
vue vant中picker组件的使用
Nov 03 Javascript
js前端图片加载异常兜底方案
Jun 21 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
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP.vs.JAVA
2016/04/29 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python实现井字棋游戏
2020/03/30 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
python datetime处理时间小结
2020/04/16 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
高级3D打印市场:Gambody
2019/12/26 全球购物
abstract是什么意思
2012/02/12 面试题
爷爷追悼会答谢词
2014/01/24 职场文书
《散步》教学反思
2014/03/02 职场文书
会计工作决心书
2014/03/11 职场文书
初中英语演讲稿
2014/04/29 职场文书
放假通知范文
2015/04/14 职场文书
教师岗位说明书
2015/09/30 职场文书
Android中View.post和Handler.post的关系
2022/06/05 Java/Android
Oracle中日期的使用方法实例
2022/07/07 Oracle