在使用 OcLazyLoad 加载控制器之前解决资源调用
Resolve resource call before controller load with OcLazyLoad
我需要使用 $resource 提供程序对我的网络服务执行 http 调用。
我想首先解析来自 http 调用的数据,然后将此结果注入控制器。
从 OcLazyLoad 的角度考虑,我刚刚编写了这段代码。
在我看来应该是:
- 首次加载服务;
- 进行 http 调用;
当promise解决后,加载controller
.state('app.user.customer.detail', {
url: '/{id}',
templateUrl: "assets/views/customerDetail.html",
resolve: { loadMyService: ['$ocLazyLoad', '$injector',
function($ocLazyLoad, $injector) {
return $ocLazyLoad.load('assets/js/services/customer.js').then(
function() {
return $ocLazyLoad.load('assets/js/services/customerFirstService.js').then(function() {
var $serviceTest = $injector.get("CustomerFirstLoad");
$serviceTest.testLoad();
}).then(function(){
return $ocLazyLoad.load(['assets/js/controllers/customerCtrl.js']);
});
});
}]}
这是服务
'use strict';
app.factory('CustomerFirstLoad', ['$q', '$timeout', function Customers($q, $timeout) {
var svc = {};
svc.testLoad = function(){
var deferrer = $q.defer();
$timeout(function(){
console.log("response");
deferrer.resolve("response");
}, 3000);
return deferrer.promise;
};
return svc;
}]);
有什么建议吗?
试试这个
.state('app.user.customer.detail', {
url: '/{id}',
templateUrl: "assets/views/customerDetail.html",
resolve: { loadMyService: ['$ocLazyLoad', '$injector',
function($ocLazyLoad, $injector) {
return $ocLazyLoad.load('assets/js/services/customer.js').then(
function() {
return $ocLazyLoad.load('assets/js/services/customerFirstService.js').then(function() {
var $serviceTest = $injector.get("CustomerFirstLoad");
return $serviceTest.testLoad(); // <-- CHANGED HERE
}).then(function(){
return $ocLazyLoad.load(['assets/js/controllers/customerCtrl.js']);
});
});
}]}
您需要 return $serviceTest.testLoad()
的承诺,因为这样 $ocLazyLoad
在 $serviceTest.testLoad()
完成之前不会继续。
我需要使用 $resource 提供程序对我的网络服务执行 http 调用。 我想首先解析来自 http 调用的数据,然后将此结果注入控制器。 从 OcLazyLoad 的角度考虑,我刚刚编写了这段代码。 在我看来应该是:
- 首次加载服务;
- 进行 http 调用;
当promise解决后,加载controller
.state('app.user.customer.detail', { url: '/{id}', templateUrl: "assets/views/customerDetail.html", resolve: { loadMyService: ['$ocLazyLoad', '$injector', function($ocLazyLoad, $injector) { return $ocLazyLoad.load('assets/js/services/customer.js').then( function() { return $ocLazyLoad.load('assets/js/services/customerFirstService.js').then(function() { var $serviceTest = $injector.get("CustomerFirstLoad"); $serviceTest.testLoad(); }).then(function(){ return $ocLazyLoad.load(['assets/js/controllers/customerCtrl.js']); }); }); }]}
这是服务
'use strict';
app.factory('CustomerFirstLoad', ['$q', '$timeout', function Customers($q, $timeout) {
var svc = {};
svc.testLoad = function(){
var deferrer = $q.defer();
$timeout(function(){
console.log("response");
deferrer.resolve("response");
}, 3000);
return deferrer.promise;
};
return svc;
}]);
有什么建议吗?
试试这个
.state('app.user.customer.detail', {
url: '/{id}',
templateUrl: "assets/views/customerDetail.html",
resolve: { loadMyService: ['$ocLazyLoad', '$injector',
function($ocLazyLoad, $injector) {
return $ocLazyLoad.load('assets/js/services/customer.js').then(
function() {
return $ocLazyLoad.load('assets/js/services/customerFirstService.js').then(function() {
var $serviceTest = $injector.get("CustomerFirstLoad");
return $serviceTest.testLoad(); // <-- CHANGED HERE
}).then(function(){
return $ocLazyLoad.load(['assets/js/controllers/customerCtrl.js']);
});
});
}]}
您需要 return $serviceTest.testLoad()
的承诺,因为这样 $ocLazyLoad
在 $serviceTest.testLoad()
完成之前不会继续。