详解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 相关文章推荐
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
JavaScript中的lastIndexOf()方法使用详解
Jun 06 Javascript
js实现常用排序算法
Aug 09 Javascript
jquery-mobile基础属性与用法详解
Nov 23 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 Javascript
React-router v4 路由配置方法小结
Aug 08 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
Oct 08 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
JS中==、===你分清楚了吗
Mar 04 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
jQuery的学习步骤
2011/02/23 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
javascript 闭包详解
2015/07/02 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
JS实现页面内跳转的简单代码
2017/09/03 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
js canvas实现红包照片效果
2018/08/21 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
Python 专题三 字符串的基础知识
2017/03/19 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
哪些是python中web开发框架
2020/06/17 Python
Python 代码调试技巧示例代码
2020/08/11 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
营业经理岗位职责
2013/11/10 职场文书
物业总经理岗位职责
2014/02/28 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书