当前位置: 移动技术网 > IT编程>脚本编程>AngularJs > 详解angularJs指令的3种绑定策略

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

2018年04月30日  | 移动技术网IT编程  | 我要评论
今天,我来谈谈angularjs指令的3种绑定策略。 公司最近大量使用angularjs做单页面应用,就免不了使用angularjs的一些组件,而有的组件网上有现成的,不

今天,我来谈谈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种绑定策略有些许帮助!也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网