【问题标题】:ocLazyLoad controller dependency data resolve issueocLazyLoad 控制器依赖数据解决问题
【发布时间】:2017-06-14 15:09:41
【问题描述】:

我有一种情况,我在 Angular js 中使用 ocLazyLoad 加载服务和控制器,它按预期工作。但是,我也想通过使用 ocLazyLoad 解决的服务将一些数据传递给控制器​​,不幸的是我无法以任何方式完成此操作。我尝试了以下两种方法。

我的服务

(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页面本身预加载的。 任何帮助将不胜感激。

【问题讨论】:

  • 只是为了让您在我的代码中知道 http 是建立在 $http 之上的并且是不同的 :)
  • 一个更新,我添加了 try catch,现在得到 Unknown Provider 错误,我不知道为什么,因为正在加载服务,如果我删除供应商解析功能它工作正常:(

标签: angularjs angular-ui-router angular-promise resolve oclazyload


【解决方案1】:

好的,我解决了这个问题。我在 chrome 网络选项卡中看到,在 ocLazyLoad 实际加载 js 文件之前调用了数据解析函数,我所做的是将 ocLazyLoad 解析依赖项包含在我的控制器数据依赖项中,如下所示

resolve: {
                    **deps**: function ($ocLazyLoad, $injector) {
                        return $ocLazyLoad.load([
                            'app/services/vendor.service.js',
                            'app/main/vendors/vendors.controller.js'
                        ])
                    },
                    vendors: function (**deps**, $injector) {
                        debugger;
                       try {
                            var vendorService = $injector.get('vendorService');
                            return vendorService.getAll();
                       } catch (error) {
                           console.error(error);
                       }
                    }
                }

【讨论】:

  • 你能解释一下吗?我提到,你如何从你的控制器调用 ocLazyLoad?你能从你的控制器加载一个 js 文件吗?谢谢。
猜你喜欢
  • 2019-06-07
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 2021-12-02
  • 2017-04-10
  • 2011-12-08
相关资源
最近更新 更多