我有一项服务:

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/

10-10 15:28