详解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奇异的arguments分析
Oct 20 Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
使用jQuery实现更改默认alert框体
Apr 13 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
angular第三方包开发整理(小结)
Apr 19 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
Vue实现开心消消乐游戏算法
Oct 22 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程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
php实现网页端验证码功能
2017/07/11 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
详解python:time模块用法
2019/03/25 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Python 绘制可视化折线图
2020/07/22 Python
就业协议书怎么填
2014/04/11 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
十八大演讲稿
2014/05/22 职场文书