Можно ли разрешить контроллер и службу в ui-router resolve в AngularJS?

#angularjs #angular-ui-router

#angularjs #angular-ui-router

Вопрос:

Я пытаюсь разрешить контроллер и службу в ui-router reslove следующим образом

контроллер: ‘js/app/dashboard/dashboardService.js ‘, сервис — это: ‘js/app/dashboard/dashboard.Controller.js ‘

 .state('dashboards.sample', {
             url: "/outlook",
             templateUrl: "views/Dashboard/sample.html",
             data: { pageTitle: 'Outlook view', specialClass: 'fixed-sidebar' },
             controller: 'productsController',
             controllerAs: 'pd',
             resolve: {

                 loadPlugin: function ($ocLazyLoad) {

                     return $ocLazyLoad.load([
                         {
                             name: 'ProductModule',
                             files: ['js/app/dashboard/dashboardService.js', 'js/app/dashboard/dashboard.Controller.js']
                         }
                     ]);
                 }
             }
         })
  

Проблема в том, что контроллер загружается до обслуживания (иногда это происходит наоборот). Итак, есть ли способ вложенного решения этой проблемы, т. е. сначала загрузить службу, а не контроллер.

ошибка, обычно возникающая в консоли

  angular.js:38 Uncaught Error: [$injector:nomod] http://errors.angularjs.org/1.5.0/$injector/nomod?p0=ProductModule(anonymous function) @ angular.js:38(anonymous function) @ angular.js:2015b @ angular.js:1939(anonymous function) @ angular.js:2013(anonymous function) @ dashboardService.js:2
angular.js:13236 Error: [$injector:unpr] http://errors.angularjs.org/1.5.0/$injector/unpr?p0=dashboardServiceProvider <-NaNashboardService <- productsController
    at Error (native)
    at http://localhost:8012/js/angular/angular.min.js:6:416
    at http://localhost:8012/js/angular/angular.min.js:43:7
    at Object.d [as get] (http://localhost:8012/js/angular/angular.min.js:40:270)
    at http://localhost:8012/js/angular/angular.min.js:43:69
    at d (http://localhost:8012/js/angular/angular.min.js:40:270)
    at e (http://localhost:8012/js/angular/angular.min.js:41:1)
    at Object.instantiate (http://localhost:8012/js/angular/angular.min.js:41:364)
    at http://localhost:8012/js/angular/angular.min.js:87:42
    at http://localhost:8012/js/ui-router/angular-ui-router.min.js:7:23333
  

Ответ №1:

Я сделал это, упомянув, чтобы загружать файлы последовательно (т.Е. serie: true, ). Таким образом, файл службы будет загружен до его использования в контроллере.

 .state('dashboards.sample', {
             url: "/outlook",
             templateUrl: "views/Dashboard/sample.html",
             data: { pageTitle: 'Outlook view', specialClass: 'fixed-sidebar' },
             controller: 'productsController',
             controllerAs: 'pd',
             resolve: {

                 loadPlugin: function ($ocLazyLoad) {

                     return $ocLazyLoad.load([
                         {
                             serie: true,
                             name: 'ProductModule',
                             files: ['js/app/dashboard/dashboardService.js', 'js/app/dashboard/dashboard.Controller.js']
                         }
                     ]);
                 }
             }
         })