2

У меня есть обслуживание:AngularJS/машинописи: Не удалось создать экземпляр модуля благодаря сервису

module app { 
    export interface ISomeService { 
     doSomething(): string; 
    } 

    export class SomeService implements ISomeService { 
     doSomething() { 
      return "haaay."; 
     }; 
    } 

    angular.module('app').service('someService', SomeService); 
} 

У меня есть контроллер:

module app { 
    export interface ISomeController { 
     doControllerThings(): string; 
    } 

    export class SomeController implements ISomeController { 
     static $inject = ['someService']; 
     constructor(private someService: ISomeService) { } 
     } 
    } 

    angular.module('app').controller('someController', SomeController); 
} 

У меня также есть файл маршрутизации (с использованием UI-маршрутизатор) :

module app { 
'use strict'; 

angular 
    .module('app') 
    .config(config); 

config.$inject = ['$stateProvider', 'someService']; 
function config($stateProvider, someService) { 
    $stateProvider 
    .state('someState', { 
     url: '/Home/Hello/', 
     parent: 'home', 
     resolve: { 
      someValues() { return someService.doSomething(); } 
     }, 
     views: { 
      '[email protected]': { 
        templateUrl: /path/to/file/something.html', 
        controller: 'someController', 
        controllerAs: 'vm' 
      } 
     } 
    }); 
} 

Я получаю эту ошибку, и я не знаю, почему:

Error: [$injector:modulerr] Failed to instantiate module app due to: 
[$injector:unpr] Unknown provider: someService 

Я знаю, что мой файл маршрутизации в основном использует простой javascript на данный момент, поэтому я приношу свои извинения за большую бельмо на глазу, после того как вы посмотрели несколько примеров TypeScript.

EDIT: Сделано несколько обновлений. Плохие копии/вставки.

ответ

2

Существует a working plunker

Дело в том, - мы не может попросить 'someService', который будет введен в .config() фазы. В этом случае могут быть введены и настроены только Провайдеры.

Итак, нам нужно переместить зависимость для службы непосредственно resolver - someValues : ['someService', (someService) => ... // это место, чтобы попросить «someService». Так как это будет называться в фазе .run()

angular 
    .module('app') 
    .config(config); 

config.$inject = ['$stateProvider' ]; 
function config($stateProvider) { 
    $stateProvider 
    .state('someState', { 
     url: '/Home/Hello/', 
     parent: 'home', 
     resolve: {   
      someValues : ['someService', (someService) => 
             { return someService.doSomething(); }] 
     }, 
     views: { 
      '[email protected]': { 
        templateUrl: 'path/to/file/something.html', 
        controller: 'someController', 
        controllerAs: 'vm' 
      } 
     } 
    }); 
}; 

Проверьте его в действии here

+0

Спасибо. Я собираюсь отметить это как правильный ответ - после применения изменений все работает! –

+0

Замечательно, что, сэр;) Наслаждайтесь этой мощной комбинацией - Typcript, угловой - UI-Router;) –

Смежные вопросы