Разрешить вызов ресурса перед загрузкой контроллера с помощью 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() законченный.

Другие вопросы по тегам