Разрешить вызов ресурса перед загрузкой контроллера с помощью OcLazyLoad
Мне нужно выполнить http-вызов моего веб-сервиса с помощью поставщика $ ресурса. Я хотел бы разрешить сначала данные, поступающие от http-вызова, а затем внедрить этот результат в контроллер. Думая с точки зрения OcLazyLoad, я только что написал этот кусок кода. На мой взгляд, это должно:
- Служба первой загрузки;
- Сделайте http-вызов;
Когда обещание выполнено, загрузите контроллер
.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;
}]);
Несколько советов?
1 ответ
Решение
Попробуй это
.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']);
});
});
}]}
Вам нужно вернуть обещание $serviceTest.testLoad()
потому что так $ocLazyLoad
не продолжается до $serviceTest.testLoad()
законченный.