我有服务:
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-router):
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: {
'content@': {
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示例后的大眼睛道歉。
编辑:做了一些更新。错误的复制/粘贴编辑。
答案 0 :(得分:2)
关键是 - 我们不能要求 'someService'
注入 .config()
阶段。在这种情况下,只能注入和配置提供商。
因此,我们需要将服务的依赖项直接转移到 resolver
- someValues : ['someService', (someService) =>
... //这是要求的地方。 someService&#39 ;.因为这将在 .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: {
'content@': {
templateUrl: 'path/to/file/something.html',
controller: 'someController',
controllerAs: 'vm'
}
}
});
};
检查行动here