解析angularjs中的三种数据绑定策略
来源:互联网 发布:布林线指标源码 编辑:程序博客网 时间:2024/05/16 14:37
导入:我们想要实现这样的效果:当我们点击标题的时候展示下面的内容,再点击则收回去。
一、首先回顾一下有哪些绑定策略?
看这个实在是有点抽象了,我们来看具体的实例分析吧!
二、简单的Demo实例
@绑定:传递一个字符串作为属性的值。比如 str : ‘@string’
控制器中代码部分示例:
myDirec.controller('MyCtrl3',['$scope',function($scope){ $scope.ctrlFlavor="鸡尾酒"; $scope.sayHello=function(name){ alert("Hello "+name); }; }]);myDirec.directive("drink",function(){ return{ restrict:'AE', scope:{ flavor:'@' //自动绑定,传递的是字符串 }, template:"<div>{{flavor}}</div>", };});
页面中使用标签部分示例:
<div ng-controller="MyCtrl3"> <drink flavor="{{ctrlFlavor}}"></drink> </div>
分析我们在drink指令中为什么能取得在父作用域中的值呢?原因就在于我们使用了@绑定策略,可以将ctrlFlavor赋值给flavor,这样在模板中就能取到该值了。
=绑定:指定获取属性的类型为父作用域的属性
myDirec.directive("drink2",function(){ return{ restrict:'AE', scope:{ flavor:'=' //自动绑定 }, template:'<input type="text" ng-model="flavor"/>' };});
页面:
<div ng-controller="MyCtrl3"> <drink2 flavor="ctrlFlavor"></drink2> </div>
执行的流程是这样的:
① 指令被编译的时候会扫描到template中的模型发现有一个flavor,
② 查找scope中是否定义:通过=与父作用域绑定,方式是传递父作用域中的属性ctrlFlavor;
③ flavor与父作用域中的ctrlFlavor属性绑定,找到它的值“鸡尾酒”;
④ 将model的值显示在模板中。
&绑定:传递的是父作用域中的函数
控制器部分:
myDirec.directive("greeting", function() { return { restrict:'AE', scope:{ greet:'&' }, template:'<input type="text" ng-model="userName" /><br/>'+ '<button ng-click="greet({name:userName})">问候一下</button><br/>' };});
页面部分:
<div ng-controller="MyCtrl3"> <greeting greet="sayHello(name)"></greeting> <greeting greet="sayHello(name)"></greeting> <greeting greet="sayHello(name)"></greeting></div>
从结果上看,三个输入框中的内容互不影响,因为都是新的独立作用域,能够完成从视图到模型的绑定。
三、Expander示例
首先看控制器代码:
/*Expander示例*/myDirec.controller('SomeController',function($scope) { $scope.title = '点击展开'; $scope.text = '这里是内部的显示的内容';});myDirec.directive('expander', function() { return { restrict : 'EA', replace : true, transclude : true, scope : { title : '=expanderTitle' }, template : '<div>' + '<div class="title" ng-click="toggle()">{{title}}</div>' + '<div class="body" ng-show="showMe" ng-transclude></div>' + '</div>', link : function(scope, element, attrs) { scope.showMe = false; scope.toggle = function() { scope.showMe = !scope.showMe; }; } };});
再看页面部分:
<div ng-controller='SomeController'> <expander class='expander' expander-title='title'> {{text}} </expander> </div>
执行的流程是这样的:
① 指令被编译的时候会扫描到template中的模型发现有一个{{title}},
② 查找scope中是否定义:通过=与父作用域绑定,方式是传递父作用域中的属性;
我总是在这里犯糊涂,解释下这个“方式是传递父作用域中的属性”,这个在哪里用的呢?
<div ng-controller='SomeController'> <expander class='expander' expander-title='title'> {{text}} </expander> </div>看到没,指令中的属性expander-title='title',这不就是传递父作用域中的属性吗?
③ expander-title与父作用域中的title属性绑定,找到它的值“点击展开”;
④ 将title的值显示在模板中。
注意:指令中的独立作用域中的属性title是为了给下面的模板使用 的,而title所对应的值,要依据页面中指令的使用传人具体的父作用域中的属性,完成属性的绑定操作。
总之、我们可以利用angularjs为我们提供的数据绑定策略来实现从父作用域向指令中传值,这个很有用哦!
不知道讲清楚了没,欢迎批评指正O(∩_∩)O~
- 解析angularjs中的三种数据绑定策略
- angularjs的二种数据绑定
- AngularJS (=,@,&)绑定策略
- 浅谈angularjs中指令的三种绑定策略
- angularJs自定义指令的三种绑定策略
- 《AngularJS》——scope的三种绑定策略
- angularjs中的隔离作用域理解以及绑定策略
- AngularJS指令详解(4)—指令中的绑定策略
- angularjs中的隔离作用域理解以及绑定策略
- AngularJS学习之绑定策略
- AngularJS Scope的绑定策略
- angularjs scope的绑定策略
- WPF ListView 的三种数据绑定方式
- 数据仓库中的三种数据库模型
- 数据仓库中的三种数据库模式
- AngularJS 中的数据绑定
- 《AngularJS》——scope的绑定策略
- angularJs指令的3种绑定策略
- css3 svg 背景图 data:image/svg+xml;base64
- Openvpn安装
- 灵活使用shiro的密码服务模块
- Zookeeper(分布式应用程序协调服务)
- LSM树由来、设计思想以及应用到HBase的索引
- 解析angularjs中的三种数据绑定策略
- 串口termios结构体的详细设置
- Redhat Enterprise 下kernel编译方法
- MySQL的“load data infile”中文件找不到的问题
- 动态规划之最长公共子序列
- Oracle 保密字段截取 例如手机号,身份证信息
- 安卓常见类备忘录之LayoutParams
- MAC下安装与配置MySQL
- javascript内存泄露及解决方案详解