我有一项服务:
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: {
'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,所以我很抱歉,在查看了一些打字脚本之后,它就变成了大眼睛。
编辑:做了一些更新。错误的复制/粘贴编辑。
最佳答案
存在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: {
'content@': {
templateUrl: 'path/to/file/something.html',
controller: 'someController',
controllerAs: 'vm'
}
}
});
};
启动检查here
关于javascript - AngularJS/TypeScript:由于服务而无法实例化模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33615797/