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基础类型 —— Sets集合
集合(set)是一个无序不重复元素的序列. 基本功能是进行成员关系测试和删除重复元素. 运行结果如下: sets其他操作: myset.add('x') # 添加一项 myset.update([10 ...
- <转> 解决异常:IllegalStateException: Fragment <ThisFragment> is not currently in the FragmentManager
上午敲代码时出现这个问题,简单记录一下解决办法,有时间详细描述一下深层原因. 问题出现在这: @Override public void onSaveInstanceState(Bundle outS ...
- Java 8 lambda表达式示例
例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...
- StringUtils一些常用方法
StringUtils是org.apache.commons.lang jar包里面的类方法,当输入参数String为null则不会抛出NullPointerException,而是做了相应处理,nu ...
- 【LOJ】#2551. 「JSOI2018」列队
题解 老年选手一道裸的主席树都要看好久才看出来 首先熟练的把这个区间建成\(n\)个主席树 然后对于一个询问,我们相当于在主席树上二分一个mid,使得\(mid - K + 1\)正好和\([l,r] ...
- 005.iSCSI客户端配置示例-Windows
一 环境 Linux作为iSCSI服务端,Windows2008R2作为iSCSI客户端 二 服务端配置过程 2.1 客户端配置 在Linux上参照之前的配置建立三个LUN卷作为共享盘,最终配置如下: ...
- InnoDB的锁机制浅析(四)—不同SQL的加锁状况
不同SQL的加锁状况 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/ ...
- JAVA 传递
其实java里面都是传值,只不过基本数据类型传的是数值,而引用类型传的是对象的地址. 作者:Intopass链接:https://www.zhihu.com/question/31203609/ans ...
- 表达式树(Expression Tree)
饮水思源 本文并非原创而是下面网址的一个学习笔记 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/e ...
- opesntack 底层共享存储 迁移配置
底层共享存储在迁移配置: 每台compute 节点都需要配置一下 让nova用户可以登陆 usermod -s /bin/bash nova 设置nova 用户密码 echo "nova&q ...