AngularJS之watch
简介
首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法。
在digest执行时,如果watch观察的的value与上一次执行时不一样时,就会被触发。
AngularJS内部的watch实现了页面随model的及时更新。
$watch方法在用的时候主要是手动的监听一个对象,但对象发生变化时触发某个事件。】
语法
$watch(watchFn,watchAction,deepWatch)
watchFn:该参数是一个带有Angular 表达式或者函数的字符串,它会返回被监控的数据模型的当前值。这个表达式将会被执行很多次,所以你要保证它不会产生其他副作用。也就是说,要保证它可以被调用很多次而不会改变状态。基于同样的原因,监控表达式应该很容易被计算出来。如果你使用字符串传递了一个Angular 表达式,那么它将会针对调用它的那个作用域中的对象而执行。
watchAction(newValue,oldValue,scope):这是一个函数或者表达式,当watchFn 发生变化时会被调用。如果是函数的形式,它将会接收到watchFn 的新旧两个值,以及作用域对象的引用。其函数签名为function(newValue, oldValue, scope)。
deepWatch:如果设置为true,这个可选的布尔型参数将会命令Angular 去检查被监控对象的每个属性是否发生了变化。如果你想要监控数组中的元素,或者对象上的所有属性,而不只是监控一个简单的值,你就可以使用这个参数。由于Angular 需要遍历数组或者对象,如果集合比较大,那么运算负担就会比较重。
var dereg = $scope.$watch('someModel.someProperty', callbackOnChange());dereg();
用法
<h3>watch简单数据类型</h3><div ng-controller="ng-watch"><input type="text" ng-model="num"><br/><span ng-bind="'变化前的值-'+preVal"></span><br/><span ng-bind="'变化后的值-'+val"></span><br/><label ng-bind="'变化次数-'+count"></label></div>m1.controller("ng-watch",["$scope",function($sc){$sc.num = 0;$sc.count = 0;$sc.preVal = "";$sc.val = "";$sc.$watch("num",function(newValue,oldValue){if(newValue!==oldValue){$sc.preVal = oldValue;$sc.val = newValue;$sc.count++;}});}]);
<h3>watch对象</h3><div ng-controller="ng-watch2"><input type="text" ng-model="o.num"><br/><span>{{'变化前的值-'+preObj}}</span><br/><span>{{'变化后的值-'+obj}}</span><br/><label ng-bind="'变化次数-'+count"></label></div>m1.controller("ng-watch2",["$scope",function($sc){$sc.o = {"num": 0};$sc.count = 0;$sc.preObj = "";$sc.obj = "";$sc.$watch('o',function(newValue,oldValue){if(newValue!==oldValue){$sc.preObj = oldValue;$sc.obj = newValue;$sc.count++;}},true);}]);
效果:http://runjs.cn/detail/vnlh0eny
转载于:https://www.cnblogs.com/zhx1991/p/4580868.html
AngularJS之watch相关推荐
- AngularJS和DataModel
通常,在AngularJS中使用JSON作为存储数据的模型.我们可能这样在controller中写model: app.controller('BookController',['$scope',fu ...
- AngularJS 杂项知识点
1.要用ngChange要同时使用ngModel,下拉选择获取当前选中值. 2.打包代替动态加载(js文件) requirejs真正的价值在于模块化,不是动态加载,angularjs本身有模块化机制, ...
- angularjs post 跨域
web api搞好了:用Ajax妥妥的:但是前端用的AngulagJS,也懒得再换为Ajax了: 但是问题来了:提示: 已拦截跨源请求:同源策略禁止读取位于 http://x.x.x.x:port/a ...
- AngularJS 指令
1. AngularJS指令的特点: AngularJS通过被称为指令的新属性来扩展HTML,指令的前缀为ng-. AngularJS通过内置的指令来为应用添加功能. AngularJS允许你自定义指 ...
- AngularJS中的按需加载ocLazyLoad
欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...
- 【12】AngularJS 事件
AngularJS 事件 AngularJS 有自己的 HTML 事件指令. ng-click 指令 ng-click 指令定义了 AngularJS 点击事件. <div ng-app=&qu ...
- Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染
在Javascript代码里,都是按照一定顺序来执行的,当轮到一个代码片段执行的时候,浏览器就只会去执行当前的片段,不会做任何其他的事情.所以有时候一些做得不是很好的网页,当点击了某个东西之后会卡住, ...
- AngularJS学习笔记(3)——通过Ajax获取JSON数据
通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...
- angularjs 学习笔记 简单基础
angularjs是谷歌公司的一个项目,弥补了hml在构建方面的不足,通过指令(directive)来扩展html标签,可以使开发者使用html来声明动态内容. angularjs主要用来开发单页应用 ...
- Angularjs集成第三方js插件之Uploadify
有时候需要用一些第三方插件,比如datepicker,slider,或者tree等.以前的做法是直接通过jquery取得某个元素,然后调用某个方法即可.但在angularjs中,不能直接这么写,必须写 ...
最新文章
- 程序员崩溃的40多个瞬间!!!太形象了,你遇到过几个?
- 最全python面试题
- 13-19 Python Number、Python字符串、Python列表(List)、集合的基本操作、元组、字典Dicttionnary、日期和时间
- ORA-28056:Writing audit records to Windows Even...
- ASIHTTPRequest详解 [经典3]
- Spark SQL(三)之视图与执行SQL
- oracle的dtime,Oracle时间函数
- 计算机应用基础案例实训教程,计算机应用基础案例式实训教程
- 程序员经典面试题,高并发系统,一般需要怎么做
- java switch finally_JavaSE
- 授人以鱼不如授人以渔
- 设计一款知识性产品需要考虑十二个基本问题
- 牛人三个月内花不到 5000 美元拿到 CS 学位
- 比继承更有弹性的装饰者模式
- 抖音java表白教程_抖音vbs表白代码制作方法分享
- 那个只能在win7的扫雷游戏,你能通关吗?今天用Python教大家,上号!!!
- 心理学推荐书籍——《九型人格》
- IE浏览器被删除后添加失败的恢复指南
- windows11中windows安全中心打不开的解决办法
- (二)如何使用Progress Bar
热门文章
- @SentinelResource注解实现热点限流
- Spring中Bean的作用域都有哪些?
- 网络技巧:WiFi越用越慢,到底是什么原因,看完你就明白了!
- Java技术:项目构建工具Maven最佳替代者gradle介绍
- 计算机网络必备知识,非常全面!
- 计算机网络基础:网络标准相关知识介绍
- 收集很实用的 Linux 高级命令
- 提高程序员工作效率的11个技巧
- python语言的取余运算符_Python 中用于整数除法取余的运算符是()_学小易找答案...
- python爬虫面试遇到的问题