angular1 在路由中使用定时器实录

虽然ng2已经出了,而且完成了一大升级,简单易学,而且还吸收了react的功力,但是,ng1怎么也是糟糠之妻不可弃啊,最近在使用ng1路由的时候,稍不留神就给自己挖了两个坑,话不多说,咱开始讲故事了。

有一天,老板叫我:

老板:小毛啊,最近准备做个报表

wo:哦

老板:报表显示总的信息,层层点击进去可以看到详细信息,而且还要有倒计时自动刷新或者用户点击刷新,刷新数据不一样要闪个黄色。。。。。。。

wo:哦

老板:好了,出去吧,把门关上

wo:哦

虽然老板有各种要求,但是咱也只能努力满足老板啊,后悔当初不好好读书,只能来干这个了。。。。。

于是抽起袖子拿起键盘,准备开始干了:


1.策马奔腾的写完页面

2.恭恭敬敬的去问后台拿了接口

3.然后就开始给html戴套了

4.带好套之后就在本地跑起来,看看安不安全,信心满满的跑起来了


看着页面跑起来了,该倒数的倒数,该怎么动的怎么动,我深吸一口二氧化碳,放下键盘,准备收工,这个时候,手贱或者是职业病,自然而然的俺了F12,看了控制台,

整个人都感觉不好了。

这篇文章的重点开始了,毕竟咱都是不讲废话的人(上面的内容纯属扯淡)

我居然看到了超高频率的异步请求,主要可以分为两个问题:

1.我用路由切换了视图,但是之前视图的定时器还在其中用,还在定时发送请求

2.我当前的视图的定时器居然有两个同时运行(我确定我有用cancel方法取消定时器,相信我)

这就蛋疼了,那么多请求,这是要强服务器的节奏啊,咱也不能那么廉价啊,别人要一次你送几次,所以必须解决:

排查发现问题了:

1.在视图切换的时候没有清除原来视图的定时器,解决办法:

$scope.$on('$destroy',function(){
    $timeout.cancel(timerOut);//调用前先取消定时器
});
这个样子就没问题了


2.第二个问题就更加坑爹了,重复定义控制器,定义了两个控制器,所以代码就执行两次了

$routeProvider
    .when('/',{templateUrl:'/content/template/currentStocksRacing.html',controller:"MainCtrl"})
    .when('/ViewStock',{templateUrl:'/content/template/ViewStock.html',controller:"viewStock"})
    .otherwise({redirectTo:'/'});
在路由配置的时候已经配置了控制器,在视图上又来一句:
<div ng-controller='viewStock' id="view_stock">

所以此时就存在来个控制器,只是其中一个对应视图,而另一个没有对应的视图,这时候就会发生两次异步,而且有一次异步数据变化不会提现在视图中


总结:

1.用ng路由要记得在 $destroy 事件的时候清除原先视图的定时器

2.一定不能在路由配置的时候指定了控制器,在视图中再次使用ng-controller指令指定控制器

就两句话能鲁一大篇文档,我顿时对自己产生了仰慕之情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值