我有一个应用程序,除非数据已完全初始化,否则一切都无用,所以我的想法是创建一个执行以下操作的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服务器上。