1

angular jsでocLazyLoadを使用してサービスとコントローラーをロードしている状況がありますが、これは期待どおりに機能しています。しかし、ocLazyLoad によって解決されるサービスを使用してコントローラーにデータを渡したいと思っていますが、残念ながらこれを実現することはできません。以下の2つのアプローチを試しました。

私のサービス

(function () {
'use strict;'
angular.module('app')
    .service('vendorService', function (http, config) {
        return {
            create: function(model){
                return http.post(config.apiUrl + "api/vendor/", model);
            },
            update: function(id , model){
                return http.put(config.apiUrl + "api/vendor/" + id, model);
            },
            delete: function(id){
                return http.delete(config.apiUrl + "api/vendor/" + id);
            },
            get: function(id){
                return http.get(config.apiUrl+ "api/vendor/" + id);
            },
            getAll: function(){
                return http.get(config.apiUrl + "api/vendor");
            }
        }
    });
})();

私のコントローラー

(function () {
'use strict;'
angular.module('app')
    .controller('vendorsController', function (vendorService, NgTableParams, vendors) {
        var vm = this;
        vm.vendorsTable = new NgTableParams({
            count: 10
        }, {
            counts: [10, 25, 50],
            dataset: angular.copy(vendors)
        });
    });
})();

index.html ページからロードされる私の設定。

アプローチ1

(function () {
'use strict;'
angular.module('app')
    .config(function ($stateProvider) {
        $stateProvider
            .state('app.vendors', {
                url: '/vendors',
                templateUrl: 'app/main/vendors/index.html',
                controller: 'vendorsController',
                controllerAs: 'vm',
                resolve: {
                    deps: function ($ocLazyLoad, $injector) {
                        return $ocLazyLoad.load([
                            'app/services/vendor.service.js',
                            'app/main/vendors/vendors.controller.js'
                        ])
                    },
                    vendors: function ($injector) {
                        var vendorService = $injector.get('vendorService');
                        return vendorService.getAll();
                    }
                }
            })
    });
})();

アプローチ 2

(function () {
'use strict;'
angular.module('app')
    .config(function ($stateProvider) {
        $stateProvider
            .state('app.vendors', {
                url: '/vendors',
                templateUrl: 'app/main/vendors/index.html',
                controller: 'vendorsController',
                controllerAs: 'vm',
                resolve: {
                    deps: function ($ocLazyLoad, $injector) {
                        return $ocLazyLoad.load([
                            'app/services/vendor.service.js',
                            'app/main/vendors/vendors.controller.js'
                        ])
                    },
                    vendors: function (vendorService) {
                        return vendorService.getAll();
                    }
                }
            })
    });
})();

コンソールにもエラーはありません。サービスで必要なすべての依存関係 (http サービスや構成など) は、html ページ自体から事前にロードされています。どんな助けでも本当に感謝しています。

4

1 に答える 1