【问题标题】:How do I check which page I'm on, or which is the controller for the current page?如何检查我在哪个页面上,或者哪个是当前页面的控制器?
【发布时间】:2016-02-22 17:40:20
【问题描述】:

我在 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 地图上每个组的标记,然后GroupController 显示所选组中每个用户的标记。

由于用户经常改变自己的位置或状态,GroupController中的数据每隔一分钟就会刷新一次。

dataFactory.getUsers($routeParams.id);
$interval(function(){
    dataFactory.getUsers($routeParams.id);
}, 60*1000);

本例中的getUsers() 方法将通过Ajax 获取数据,然后调用相应的方法在地图上显示标记。

当您转到/Group 页面一次,然后导航回/Overview 时会出现此问题。间隔继续执行,概览上的标记将被先前查看的组中用户的标记覆盖。

我想在$interval 调用中的函数内添加一个条件,用于检查我们是否在/Group 页面上。我将如何以 Angular 的方式做到这一点? (而不是检查window.location.href 字符串)

【问题讨论】:

    标签: angularjs routes url-routing


    【解决方案1】:

    您可以使用 $routeChangeStart 来跟踪页面是否被重定向到其他页面。

    $scope.$on('$routeChangeStart', function(next, current) { 
       ... you could cancel your interval here ...
     });
    

    或

    您可以使用以下任何一种来跟踪位置变化。

    $locationChangeStart - 在位置视图模型和浏览器 URL 同步之前触发。 $locationChangeSuccess - 在位置视图模型和浏览器 URL 同步后触发。

    $scope.$on("$locationChangeSuccess",function(event) {
         ... you could cancel your interval here ...
    });
    

    【讨论】:

      【解决方案2】:

      我会走向不同的方向。离开页面时应该停止间隔,而不是添加条件。

      var intervalPromise = $interval(function () { /* ... */ }, 5000);      
      $scope.$on('$destroy', function () { $interval.cancel(intervalPromise); });
      

      当你离开控制器时,这会破坏你的计时器。

      In angular, how to use cancel an $interval on user events, like page change?

      【讨论】:

        猜你喜欢
        • 2014-10-24
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        相关资源
        最近更新 更多