在应用启动时初始化服务

时间:2014-02-18 10:49:57

标签: angularjs

我有一个应用程序,除非数据已完全初始化,否则一切都无用,所以我的想法是创建一个执行以下操作的InitSvc:

myApp.factory('initSvc', function($q, lookupTableSvc, rawDataSvc, consolidatorSvc) {
  $q.wait([lookupTable.load, rawData.load, consolidator.consolidate]);
  // *** Question 1 ***
}

lookupTableSvc:

myApp.factory('lookupTable', function($q, $http) {
  return {
    load: function() {
      var deferred = $q.defer;
      $http({ method: 'GET', url: 'lookupData.js' }).
      success(function (data) {
        this.lookupTable = data;
        $q.resolve();
        // *** Question 2 ***
      })
      return $q.promise;
  };
}

rawDataSvc与lookupTable大致相同。

consolidatorSvc看起来应该是这样的:

myApp.factory('consolidatorSvc', function(rawDataSvc) {
  return {
    consolidate: function() {
      this.dataTable = churn(rawDataSvc.data);
    }
  }
};

最后:

var myApp = angular.module('myApp').
  config(function(initSvc) {
    // *** Question 1 ***
    // set up routes etc
  });

myApp.controller('consolidatedDataCtrl', function(lookupSvc, consolidatorSvc) {
  $scope.lookupValues = lookupSvc.lookupTable; // to get display names
  $scope.dataTable = consolidatorSvc.dataTable;
});

myApp.controller('rawDataCtrl', function(lookupSvc, rawDataSvc) {
  $scope.lookupValues = lookupSvc.lookupTable;
  $scope.data = rawDataSvc.data;
});

问题1: 在module.config中注入initSvc是否会在初始化数据时自动导致配置功能暂停?

问题2: 可以/我应该在没有参数的情况下执行$ q.resolve(),因为我将数据存储在另一个字段中吗?

主要问题: 我刚刚开始使用角度并且让这个应用程序正常工作,但是我在我的控制器中做了太多的工作,如果有人将另一个页面添加到起始页面以外的其他页面,则应用程序会崩溃,因为数据未初始化。这是解决这个问题的正确方法还是使用角度更好的方法?

如果我可以在服务器端进行一些处理,整个应用程序会更容易,但它将在一个简单的静态http服务器上。

0 个答案:

没有答案