我在 Angularjs 中有一个页面,我使用 RouteProvider 来控制页面和它们的 URL。我的(部分)routeProvider 定义如下所示:
$routeProvider.when("/", {
redirectTo: "/Overview"
}).when("/Overview", {
controller: "OverviewController",
templateUrl:"template/overview.html"
}).when("/Group", {
controller: "GroupController",
templateUrl:"template/group.html"
});
OverviewController
显示 Google map 上每个群组的标记,然后 GroupController
显示所选群组中每个用户的标记。
由于用户经常改变自己的位置或状态,GroupController
中的数据每隔一分钟就会刷新一次。
dataFactory.getUsers($routeParams.id);
$interval(function(){
dataFactory.getUsers($routeParams.id);
}, 60*1000);
本例中的 getUsers()
方法将通过 Ajax 获取数据,然后调用适当的方法以在 map 上显示标记。
当您转到 /Group
页面一次,然后导航回 /Overview
时,就会出现此问题。该间隔继续执行,概览上的标记将被之前查看的组中的用户的标记覆盖。
我想在 $interval
调用中的函数内添加一个条件,该条件将检查我们是否位于 /Group
页面上。我该如何以 Angular 的方式做到这一点? (而不是检查 window.location.href
字符串)
最佳答案
我会走向不同的方向。您应该在离开页面时停止间隔,而不是添加条件。
var intervalPromise = $interval(function () { /* ... */ }, 5000);
$scope.$on('$destroy', function () { $interval.cancel(intervalPromise); });
当您离开 Controller 时,这会破坏您的计时器。
In angular, how to use cancel an $interval on user events, like page change?
关于angularjs - 如何检查我位于哪个页面,或者哪个是当前页面的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823218/