首页 > 语言 > JavaScript > 正文

详解angularJs指令的3种绑定策略

2024-05-06 15:18:28
字体:
来源:转载
供稿:网友

今天,我来谈谈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"   })            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选