angularjs定时任务的设置与清除示例


Posted in Javascript onJune 02, 2017

人们似乎常常将AngularJS中的$timeOut()  $interval()函数看做是一个内置的、无须在意的函数。但是,如果你忘记了$timeOut()$interval()的回调函数将会造成非常不好的影响,你可能会因此遇到代码莫名其妙的出现问题,或者无端抛出一个错误甚至是一遍一遍的重复对的你的服务器进行$http请求这些诡异的情形。管理好你的$timeOut/$interval定时器的小技巧就是在$destory事件中将它们取消。

和JavaScript中原生的setTimeout()以及setInterval()函数不同,AngularJS中的$timeOut()函数会返回一个promise。和其他的promise一样,你可以绑定$timeOut的resolved和rejected时间。然而更重要的是,你可以通过将这个promise传递给$timeOut.cancel()方法来取消掉潜在的定时器。

设置定时任务,给定时任务起一个名字time_upd,为的是方便清理的时候直接调用名称。

var timeout_upd = $interval($scope.upd_data ,6000);

注意:设置的时候$interval(fn ,time);第一个参数fn 不能写“()”,只能写$scope.方法名称。第二个参数是定时执行的时间间隔,单位为毫秒。

清除定时任务,AngularJS将会在scope中触发$destory事件。这让我们可以有机会来cancel任何潜在的定时器。

$scope.$on('$destroy',function(){ 
    $interval.cancel(timeout_upd); 
  })

我的页面是这种格式的,如下图所示。angularjs在“实时数据监测”这个模块设置了一个定时任务,当我点击菜单栏到别的页面时,默认的这个定时任务还在执行,占用很多资源。所以必须得清除这个定时任务,原生的清除window.clearInterval(timeout_upd);是不管用的,必须用angularjs自带的清除方法,如上代码所示。

angularjs定时任务的设置与清除示例

注意:angularjs中设置了定时任务之后,必须清除定时任务,不然angularjs会在离开这个controller后,仍然会执行这个定时任务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
详解vue之页面缓存问题(基于2.0)
Jan 10 Javascript
如何解决vue与传统jquery插件冲突
Mar 20 Javascript
原生JS实现不断变化的标签
May 22 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
Jan 27 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
Aug 30 Javascript
JS实现碰撞检测的方法分析
Jan 19 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
解决vue无法设置滚动位置的问题
Oct 07 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
LayUI数据接口返回实体封装的例子
Sep 12 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
Apr 07 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 #Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 #Javascript
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 #Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 #Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 #Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 #jQuery
Vue.js中数据绑定的语法教程
Jun 02 #Javascript
You might like
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
vue ssr 指南详读
2018/06/29 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python使用多进程的实例详解
2018/09/19 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
面料业务员岗位职责
2013/12/26 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
上党课的心得体会
2014/09/02 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript