详解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 相关文章推荐
浅谈jQuery中height与width
Jul 06 Javascript
node.js实现快速截图
Aug 27 Javascript
JS动态给对象添加属性和值的实现方法
Oct 21 Javascript
javascript中神奇的 Date对象小结
Oct 12 Javascript
JS实现的ajax和同源策略(实例讲解)
Dec 01 Javascript
Vue组件之自定义事件的功能图解
Feb 01 Javascript
vue实现自定义多选与单选的答题功能
Jul 05 Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 Javascript
更改BootStrap popover的默认样式及popover简单用法
Sep 13 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
Vue组件基础用法详解
Feb 05 Javascript
JavaScript实现简单的音乐播放器
Aug 14 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
js 内存释放问题
2010/04/25 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
iview实现图片上传功能
2020/06/29 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
采购部经理岗位职责
2014/02/10 职场文书
打架检讨书2000字
2014/02/22 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
工作感想范文
2015/08/07 职场文书
2016新年问候语大全
2015/11/11 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js