Angular 计时器的问题。

2014-07-30 16:08:41 +08:00
 coolicer
有一种情景,我要隔一段时间取数据,然后我离开这个controller,发现还会不断地取。

.....
9793 次点击
所在节点    JavaScript
10 条回复
coolicer
2014-07-30 16:10:45 +08:00
可以在路由切换结束的时候清掉吗?

我已经不用这种方法,让用户 自己点击的时候获取算了。但是想知道怎么解决这个。
lyric
2014-07-30 16:15:42 +08:00
我以前做法是专门做一个单例 Daemon 来处理所有定时请求,暴露 register 和 unregister 接口给 controller,controller 销毁时 unregister 掉。
Tonni
2014-07-30 16:17:31 +08:00
我前段时间用Angular写过些代码,感觉封装太深了,还是Backbone + marionette灵活些。
coolicer
2014-07-30 16:29:36 +08:00
@lyric 上伪代码?

@Tonni 做后台管理系统,感觉Angular还是有优点。
terrortang
2014-07-30 16:34:05 +08:00
监听routeChangeStart?然后里面把timeout cancel掉?
coolicer
2014-07-30 16:36:55 +08:00
@terrortang 我只是这样想,不知道能不能。
coolicer
2014-07-30 16:37:39 +08:00
如果是这样,变量要挂$rootScope了?
@terrortang
lyric
2014-07-30 16:40:49 +08:00
@coolicer 很简单啊,还要伪代码。daemon 内部有一个 {} 去记录定时任务的参数、回调。 register 写入这个{},返回 {} 的 key 作为 handler;unregister 时传 handler 进去,delete [handler];

另外我还有一个 update 方法去更新定时任务的参数。

daemon 内部有一个 loop,每次用 setTimeout 触发启动,loop 中按照每个定时任务的参数执行,并执行回调函数。
Anran
2014-07-30 16:52:09 +08:00
使用自带的 $timeout, 然后监听 $destroy 事件
https://docs.angularjs.org/api/ng/type/$rootScope.Scope
coolicer
2014-07-30 17:16:05 +08:00
@Anran 不错。如果有需要就用这种

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125289

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX