AngularJS指令之绑定策略“@”,“=”,“&”
学习到绑定策略这一块的时候始终很迷糊,不清楚这三个绑定策略到底如何使用,写了好多demo,终于弄明白了。
首先介绍一下指令参数scope
scope参数可以设置三种值:
- false (默认值),继承父作用域,与父作用域共享model,父改,子改;子改,父改。
- true 继承父作用域并创建一个新的作用域,
用父作用域属性和方法来初始化自己的属性和方法,所以初始创建后父改子亦改,但是如果子再修改了,父不会改;而且父再改子也不会改。 - {} 隔离作用域,不继承父作用域,与外界隔离的作用域。父改子不改;子改父不改。
一、
1 <!DOCTYPE html> 2 <html ng-app="myApp"> 3 <head> 4 <meta charset="utf-8" /> 5 <title></title> 6 <script src="Scripts/angular.js"></script> 7 <script> 8 var myApp = angular.module('myApp', []); 9 myApp.controller('myCtrl', ['$scope', function (scope) { 10 scope.name = 'Tom'; 11 }]); 12 myApp.directive('myDire', function () { 13 return { 14 restrict: 'EA', 15 replace: false, 16 template: "<div>\ 17 <span style='color:red'>子:{{name}}</span><br />\ 18 修改子:<input type='text' ng-model='name'/>\ 19 </div >", 20 scope: false//默认值 21 } 22 }) 23 </script> 24 </head> 25 <body ng-controller="myCtrl"> 26 父:{{name}}<br /> 27 修改父:<input type="text" ng-model="name" /> 28 <div my-Dire myAttr></div> 29 </body> 30 </html>
运行结果:

二、修改 scope:true
运行结果:

三、修改 scope:{}
运行结果:

另外,在AngularJS中提供了三种(@,=,&)绑定策略,使隔离作用域与指令外部作用域进行数据绑定。
'@'(or '@attrName'):将隔离作用域与DOM属性绑定,实现复制父作用域的属性值。父改子改,子改父不改。相当于值复制
'='(or '=attrName'):进行双向数据绑定,父改子改;子改父改。相当于引用复制
'&'(or '&attrName'):与父作用域function绑定。
1 <!DOCTYPE html> 2 <html ng-app="myApp"> 3 <head> 4 <meta charset="utf-8" /> 5 <title></title> 6 <script src="Scripts/angular.js"></script> 7 <script> 8 var myApp = angular.module('myApp', []); 9 myApp.controller('myCtrl', ['$scope', function (scope) { 10 scope.name = 'Tom'; 11 scope.age = 23; 12 scope.dialog = function () { 13 alert("我的名字:" + scope.name + ",年龄:" + scope.age); 14 } 15 }]); 16 myApp.directive('myDire', function () { 17 return { 18 restrict: 'EA', 19 replace: false, 20 template: "<div>\ 21 子name:<input type='text' ng-model='name'/><br /><br />\ 22 子age: <input type='text' ng-model='age'/><br /><br />\ 23 子button:<input type='button' value='click me' ng-click='dialog()'/>\ 24 </div >", 25 scope: { 26 name: '@myName',//值复制 27 age: '=myAge',//双向数据绑定 28 dialog: '&myClick'//与父作用域function绑定 29 } 30 } 31 }) 32 </script> 33 </head> 34 <body ng-controller="myCtrl"> 35 父name:<input type="text" ng-model="name" /><br /><br /> 36 父age: <input type="text" ng-model="age" /><br /><br /> 37 <div my-Dire my-name="{{name}}" my-age="age" my-click="dialog()"></div> 38 </body> 39 </html>
运行结果:


浙公网安备 33010602011771号