使用angularjs1.x构建前台开发框架(十一)——数据双向绑定
来源:互联网 发布:四川电信网络测速 编辑:程序博客网 时间:2024/05/21 19:31
angularjs中有两个非常重要的概念,一个就是本章要介绍的数据双向绑定,另一个则是从后端延伸过来的依赖注入。那么何为数据双向绑定呢?顾名思义,即元数据(model)和视图(view)展示的数据存在绑定关系,当元数据中的信息发生变化时,视图中的数据会实时变化,反之亦然。
首先我们来看一个视图数据变更映射到元数据中的例子:
首先在controller中定义一个变量data,然后在页面上定义的输入框绑定这个变量,接下来在输入框中改变这个变量的值,最后通过在controller中定义的定时器来查看变量是否随着视图中的变更而变化。
在c2.js中定义变量以及定时器:
/** * Created by 李庆 on 2016/10/6. */define(["jquery","../../../framework/service/httpService"],function($,httpService){ var c2Controller = ["$scope","maskService",function($scope,maskService){ $scope.test = function(){ console.log("enter controller"); }; $scope.getData = function(){ maskService.show("get data"); $.ajax({ "type":"GET", "contentType":"application/json;charset=UTF-8", //修改前为"url":"mock/test.json", "url":httpService.getUrl("GET","/nova/test.json"), "success":function(data){ console.log(JSON.stringify(data)); setTimeout(function(){ maskService.hide(); },6000); }, "error":function(data){ console.log("error"); } }); }; $scope.data = ""; setInterval(show,1000); function show(){ console.log("data is "+ $scope.data); } }]; return c2Controller;});
变更部分内容如下:
在c2.html中定义输入框并绑定controller中定义的变量:
<div> <input ng-model="data" value=""> <input type="button" value="test Controller" ng-click="test()"> <button ng-click="getData()">request</button></div>
变更部分内容如下:
然后我们来看一下页面:
在没有改变输入框的值之前,定时器打印的data变量值一直为空,当在输入框中输入1后,定时器打印的data变量值变为1,这表示视图数据变更映射到了元数据。
上面的例子中,controller中定义的变量data在页面上定义的输入框中正常显示,即为元数据映射到了视图,接下来我们看一个元数据映射到视图的特例:
我们在上例的定时器中变更变量data的值,查看输入框的值是否同步变更。
在c2.js中定义变量以及定时器:
/** * Created by 李庆 on 2016/10/6. */define(["jquery","../../../framework/service/httpService"],function($,httpService){ var c2Controller = ["$scope","maskService",function($scope,maskService){ $scope.test = function(){ console.log("enter controller"); }; $scope.getData = function(){ maskService.show("get data"); $.ajax({ "type":"GET", "contentType":"application/json;charset=UTF-8", //修改前为"url":"mock/test.json", "url":httpService.getUrl("GET","/nova/test.json"), "success":function(data){ console.log(JSON.stringify(data)); setTimeout(function(){ maskService.hide(); },6000); }, "error":function(data){ console.log("error"); } }); }; $scope.data = 0; console.log(new Date()); setInterval(show,1000); function show(){ console.log(new Date()); $scope.data++; console.log("data is "+ $scope.data); } }]; return c2Controller;});
变更部分内容如下(这里为了方便查看数据变化,还打印了时间戳):
c2.html内容不变。
然后我们来看一下页面:
可以看到控制台打印的变量一直在变更,但是输入框的值一直保持不变。为什么数据双向绑定在这里失效了呢?这是由于我们在controller中自定义的定时器变更变量的行为angularjs并不感知(类似的行为还包括ajax的异步请求),此时就需要靠我们来主动触发数据双向绑定:
在c2.js中定义变量以及定时器,并主动触发数据双向绑定:
/** * Created by 李庆 on 2016/10/6. */define(["jquery","../../../framework/service/httpService"],function($,httpService){ var c2Controller = ["$scope","maskService",function($scope,maskService){ $scope.test = function(){ console.log("enter controller"); }; $scope.getData = function(){ maskService.show("get data"); $.ajax({ "type":"GET", "contentType":"application/json;charset=UTF-8", //修改前为"url":"mock/test.json", "url":httpService.getUrl("GET","/nova/test.json"), "success":function(data){ console.log(JSON.stringify(data)); setTimeout(function(){ maskService.hide(); },6000); }, "error":function(data){ console.log("error"); } }); }; $scope.data = 0; console.log(new Date()); setInterval(show,1000); function show(){ console.log(new Date()); $scope.$apply(function($scope){ $scope.data++; }); console.log("data is "+ $scope.data); } }]; return c2Controller;});
变更部分内容如下:
c2.html保持不变。
再看一下此时的页面:
此时控制台打印的变量一直在变更,且输入框的值也保持同步变更。
注意,只有在以下几种情况下才会触发数据双向绑定:
ng标签触发的事件
angularjs服务触发的数据变更(如$inerval,而不是原生的setInterval函数)
主动执行$digest()或$apply()
- 使用angularjs1.x构建前台开发框架(十一)——数据双向绑定
- 使用angularjs1.x构建前台开发框架(一)——构建基础架构
- 使用angularjs1.x构建前台开发框架(二)——require的使用
- 使用angularjs1.x构建前台开发框架(三)——国际化
- 使用angularjs1.x构建前台开发框架(五)——掩膜的实现
- 使用angularjs1.x构建前台开发框架(六)——service的引用
- 使用angularjs1.x构建前台开发框架(七)——弹窗【一】
- 使用angularjs1.x构建前台开发框架(八)——弹窗【二】
- 使用angularjs1.x构建前台开发框架(九)——弹窗【三】
- 使用angularjs1.x构建前台开发框架(十二)——脏检查
- 使用angularjs1.x构建前台开发框架(四)——模拟后台响应(打桩模块)
- 使用angularjs1.x构建前台开发框架(十)——一个完整第三方组件的引用
- AngularJS1.X学习笔记2-数据绑定
- angularJS1 数据绑定demo
- JavaScript框架之AngularJS学习——双向数据绑定
- 使用AngularJS开发商城-(使用AngularJS的双向数据绑定机制)
- JS学习笔记——AngularJS 1.x双向数据绑定机制
- 简单实现 angular1.x 双向数据绑定
- Python13
- MFC Tab Control 多层 嵌套 子对话框
- linux 命令之eval
- LDA理论、变形、优化、应用、工具库
- js滚动条的衍生--控制其他对象
- 使用angularjs1.x构建前台开发框架(十一)——数据双向绑定
- ubuntu下apache+php+mysql环境配置
- 《重构-改善既有代码的设计》读书笔记
- Linux之进程控制与管理--上课课堂笔记
- vim/vi学习笔记(第一章 the vi text editpr)
- 使用redis做计数器总结
- 后盾网原创实战网站建设教程【PS切片+html+div+css+织梦后台...
- Java之输入输出语句
- Ubuntu录屏+转gif