AngularJS双向绑定,手动实施观察
实现这样的一个需求:页面中某个地方显示某个文本框的值经过计算得到的结果,而且是文本框值每次变化显示的计算结果也跟着动态变化。
在controller中可以声明一个对象,它的一个字段用来存储初始值:
$scope.funding = {startingEstimate:0};
以上,声明了一个funding对象,它的startingEstimate字段用来存储初始值,初始值这里是0.
在controller中还应该声明一个函数,用来把根据初始值计算得到的结果赋值给funding对象的另外一个字段。
$scope.computeNeeded = function(){
$scope.funding.needed = $scope.funding.startingEstimate * 10;
};
以上,声明了computeNeeded函数,它把funding对象startingEstimate值进过计算后的结果赋值给了funding对象的另外一个字段needed。
好了,页面中的input需要和funding对象的startingEstimate双向绑定起来,用ng-model;input中每次值变化需要调用computeNeeded,用ng-change:
初始值:<input type="text" ng-model="funding.startingEstimate" ng-change="computeNeeded()">
至于显示结果,只管向funding对象的needed字段要就好了:
计算值:{{funding.needed}}
可是,还有一点小问题:现在,只有当input中的值发生变化的时候才会触发computeNeeded()方法,我们希望在页面加载的时候就执行computedNeeded方法。
为此,AngularJS为我们准备了$scope.$watch(被观察对象,执行的动作),可以把funding对象的startingEstimate字段列为被观察对象,startingEstimate字段的每次变化,都执行computedNeeded()这个动作,包括给startingEstimate字段初始赋值的时候。
$scope.$watch('funding.startingEstimate', $scope.computeNeeded);
完整代码如下:
<!doctype html><html ng-app="myApp"><head><meta charset="UTF-8"><title>Untitled Document</title><script src="angular.min.js"></script><script>var myApp = angular.module("myApp",[]);myApp.controller("MyController",['$scope',function($scope){$scope.funding = {startingEstimate:0};$scope.computeNeeded = function(){$scope.funding.needed = $scope.funding.startingEstimate * 10;};$scope.$watch('funding.startingEstimate', $scope.computeNeeded);$scope.finish = function(){alert("done");};}]);</script></head><body ng-controller="MyController"><form ng-controller="MyController" ng-submit="finish()">初始值:<input type="text" ng-model="funding.startingEstimate" ng-change="computeNeeded()">计算值:{{funding.needed}}<input type="submit" value="提交"></form></body></html>
总结:
● 双向绑定:ng-model
● 文本框值变化事件:ng-change
● 对某个对象实施观察:$scope.$watch(被观察对象,执行的动作)
● 表单提交:ng-submit
● 其它事件:ng-click, ng-dblclick
参考资料:<<用AngularJS开发下一代Web应用>>
AngularJS双向绑定,手动实施观察的更多相关文章
- Angularjs 双向绑定机制解析
文章转自:http://www.2cto.com/kf/201408/327594.html AngularJs 的元素与模型双向绑定依赖于循环检测它们之间的值,这种做法叫做脏检测,这几天研究了一下其 ...
- angularJS双向绑定和依赖反转
一.双向绑定: UI<-->数据 数据->UI (数据改变UI跟着变) UI->数据 (UI改变数据跟着变) 数据改变->UI改变原理: 监听数据是否改变,如果改变更新U ...
- AngularJs双向绑定详解
双向绑定的三个重要方法: $scope.$apply() $scope.$digest() $scope.$watch() 一.$scope.$watch() 我理解的$watch就是将对某个数据的监 ...
- AngularJs双向绑定
模型数据(Data) 模型是从AngularJS作用域对象的属性引申的.模型中的数据可能是Javascript对象.数组或基本类型,这都不重要,重要的是,他们都属于AngularJS作用域对象. An ...
- AngularJS中数据双向绑定(two-way data-binding)
1.切换工作目录 git checkout step-4 #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-m ...
- 深入学习AngularJS中数据的双向绑定机制
来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...
- 我的angularjs源码学习之旅3——脏检测与数据双向绑定
前言 为了后面描述方便,我们将保存模块的对象modules叫做模块缓存.我们跟踪的例子如下 <div ng-app="myApp" ng-controller='myCtrl ...
- Angular系列----AngularJS入门教程05:双向绑定(转载)
在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f ...
- angularjs bind与model配合双向绑定 表达式方法输出
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
随机推荐
- python模块分析之time和datetime模块
前言 我们使用time和datetime模块的主要目的是对时间戳.时间字符串.时间元组等时间的表述对象进行相互的转化.而我们平时编码涉及两个时间:一个是上海时间,也可以说是北京时间,一个是UTC时间, ...
- dblinks
一.Oracle数据库链Database links的作用 当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本 ...
- centos7下安装配置redis3.0.4
安装redis 1.进入redis官网(redis.io)下载redis稳定版安装包,目前稳定版本为3.0.4 2.在linux /usr文件夹下新建redis文件夹,拷贝安装包redis-3.0. ...
- idea如何编译maven项目
这里我们介绍两种方式,如何调试出窗口 点击菜单栏View->Tool Windows->Maven projects 点击菜单栏Help->Find Action(Ctrl+Shi ...
- MySQL安装与初步操作
MySQL是一款出色的中小型关系数据库,做Java Web开发时,要做到数据持久化存储,选择一款数据库软件自然必不可少. 由于MySQL社区版开元免费,功能比较强大,在此以MySQL为例,演示MySQ ...
- JavaScript:document.execCommand()的用法
document.execCommand()的用法小记 一.语法 execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用. 如下格式:document.ex ...
- Java编程的逻辑 (37) - 泛型 (下) - 细节和局限性
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- 应用Mongoose开发MongoDB(1)数据库连接
最近因为项目,接触了MongoDB,因为是分工合作,我负责的部分主要是实现前端对数据库增删查改的需求,因此以下内容只着重于针对不同问题如何进行解决. 整个工程的最终目的是通过mongoose编写数据库 ...
- JAVA 类和对象基础知识详解
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ...
- JSP中的指令概述和示例
一.JSP——Java server page :java服务端的页面,这是属于一个后端技术 1.前端技术: html.css.javascript 2.后端技术: java语言.框架(mybatis ...