详解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 对象的创建与使用
Mar 09 Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
快速掌握Node.js事件驱动模型
Mar 21 Javascript
javascript和jquery实现用户登录验证
May 04 Javascript
js中使用使用原型(prototype)定义方法的好处详解
Jul 04 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
JavaScript中Object基础内部方法图
Feb 05 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
JQueryDOM之样式操作
Mar 27 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php 正则 过滤html 的超链接
2009/06/02 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
php数组查找函数总结
2014/11/18 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
javascript 函数使用说明
2010/04/07 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
django连接mysql配置方法总结(推荐)
2018/08/18 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
秋季运动会广播稿大全
2014/02/17 职场文书
个人求职自荐信范文
2014/06/20 职场文书
社团活动总结格式
2014/08/29 职场文书
会计实训报告范文
2014/11/04 职场文书
信访维稳承诺书
2015/05/04 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
Nginx 常用配置
2022/05/15 Servers
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS