详解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语法高亮插件支持各种程序源代码语法着色加亮
Apr 27 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
浅谈angular.copy() 深拷贝
Sep 14 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
layui动态渲染生成select的option值方法
Sep 23 Javascript
js 递归json树实现根据子id查父id的方法分析
Nov 08 Javascript
深入了解JS之作用域和闭包
Jun 16 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
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 学习资料零碎东西
2010/12/04 PHP
php标签云的实现代码
2012/10/10 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
python Django框架实现自定义表单提交
2016/03/25 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
高级电工工作职责
2013/11/21 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
公司同意接收函
2014/01/13 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
十八大宣传标语
2014/10/09 职场文书
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS