(如何)控制器在其视图不可见时是否处于活动状态?

时间:2014-05-12 06:08:19

标签: angularjs

如果我理解正确,当视图变为活动状态时会生成控制器吗?

意思是如果视图不可见,控制器不存在/不活动?

有什么方法可以让控制器处于活动状态"在后台"?


我有一个应用程序,它有两个主要标签,一个用于车辆跟踪和其他的东西。每个选项卡都有几个子选项卡(suing UI-Router);在车辆跟踪的情况下,我有一个标签用于谷歌地图&另一个显示带有街道地址的网格。

这是我试图在Angular中重新实现的桌面应用程序的图片: enter image description here

现在,我是一个Angular n00b,所以也许我的设计理念存在缺陷,但是:

地图和车辆位置标签都使用从服务器提取的相同数据,这是GPS lat / long& amp;时间戳。

在我看来,让每个标签(控制器)获取相同的数据,复制代码是错误的。

所以,我想要一个控制器用于"车辆位置"选项卡,它将获取数据并将其提供给两个地图/车辆位置子选项卡(控制器)可以$watch的服务。

即使我没有看到那个"父母的观点" ("车辆位置",但在另一个("车辆报告"或"员工报告"),我会将此数据下载和查看更新继续,以便当用户点击"车辆位置"标签时,信息已经存在并且用户在应用程序进入服务器以获取数据并绘制其视图时不必等待。 / p>

我的解释尝试是否有意义?如果没有,请让我澄清。

问题:Angular可以这样工作,还是我要求它做一些非棱角分明的事情?如果是这样,实现这个的正确方法是什么?我应该复制$http.get代码吗?我应该让控制器取出&在$scope.$on('$viewContentLoaded'上更新自己的数据?

提前感谢您的帮助。我只希望这个问题不会让你像我一样困惑。

2 个答案:

答案 0 :(得分:3)

如果您需要AngularJS应用中数据的中心访问点,实现它的最佳方法是将其封装在providerservicefactory中)。获取提供程序中的数据并实现getter,以便您可以将其注入控制器并在不重复代码和请求的情况下请求数据。

yourApp.service('serviceName', [ '$http',
    function($http) {

        this.getData = function() {
            return $http.get(...);
        } 
    }
]);

yourApp.controller('controllerA', ['serviceName', 
    function(serviceName) {
        serviceName.getData().then(function(data){
            $scope.data = data;
        });
    }
]);

//the same for other controllers

答案 1 :(得分:1)

您可以为此应用考虑以下几点:

  1. 您可以为要共享和重用的数据创建 factory 。因此,可以创建一个http工厂来从服务器获取数据,然后将其注入您需要的任何控制器。您还可以使用angularjs(路径中的选项)中的“已解决”来解析传入数据,以确保在页面呈现之前它可用。
  2. 如果您将控制器中的数据传递给http.get,那么注入工厂并使用http方法使用 promises