虽然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指令指定控制器
就两句话能鲁一大篇文档,我顿时对自己产生了仰慕之情