在使用 OcLazyLoad 加载控制器之前解决资源调用

Resolve resource call before controller load with OcLazyLoad

我需要使用 $resource 提供程序对我的网络服务执行 http 调用。 我想首先解析来自 http 调用的数据,然后将此结果注入控制器。 从 OcLazyLoad 的角度考虑,我刚刚编写了这段代码。 在我看来应该是:

这是服务

'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() 完成之前不会继续。