Javascript AngularJS 1.3.13-传递到UI路由器配置的服务提供商未解析

Javascript AngularJS 1.3.13-传递到UI路由器配置的服务提供商未解析,javascript,angularjs,Javascript,Angularjs,我知道我不能将依赖注入工厂到配置中,因为它们只接受提供者,据我所知,提供者只是工厂和服务继承的完全可定制的服务。所以我想我应该尝试创建一些小的路由提供程序,这样我就不必在配置中的变量中添加通常重用的解析操作作为匿名函数,过了一段时间就会变得很混乱 提供者 angular.module('project.app.service', []) .provider('UserAuthService', function () { this.$get = ['UserResou

我知道我不能将依赖注入工厂到配置中,因为它们只接受提供者,据我所知,提供者只是工厂和服务继承的完全可定制的服务。所以我想我应该尝试创建一些小的路由提供程序,这样我就不必在配置中的变量中添加通常重用的解析操作作为匿名函数,过了一段时间就会变得很混乱

提供者

angular.module('project.app.service', [])

    .provider('UserAuthService', function () {

        this.$get = ['UserResource', function (UserResource) {

            return {
                getUser: getUser
            };

            function getUser() {
                 return UserResource.auth().$promise;
            }
        }];
    }),
...
路由,包括提供程序模块

angular.module('project.app.route', ['project.app.service'])

.config(['$stateProvider', '$urlRouterProvider', 'UserAuthServiceProvider', 
    function ($stateProvider, $urlRouterProvider, UserAuthServiceProvider) { 

        $stateProvider

            ...

            .state('dashboard.index', {
                url: "/map",
                templateUrl: "templates/dashboard/map/map.html",
                controller: 'MapController',
                controllerAs: 'mapCtrl',
                resolve: {
                    UserAuth: UserAuthServiceProvider.getUser()
                }
            })
            ...
});
docs声明只能注入$get函数,但它会抛出此错误,尽管它看起来应该可以工作:

TypeError: UserAuthService.getUser is not a function
从文档和示例来看,这似乎是可行的,下面的评论提供了帮助和头脑风暴

是否有一个单行解析参数解决方案使其更加模块化,或者我应该在ui路由配置的顶部删除注入工厂的匿名函数,然后忘记这一点

  • 您只能在应用程序配置/初始化(在
    module.config
    期间)时使用创建之前所需的任何内容来配置服务。你不应该在其他地方使用它
  • 如果您的提供程序上没有需要配置的内容(您只提供了
    $get
    ,Angular在运行时需要时使用它来实际创建单例),那么就没有理由将其注入
    .config
    (您也只需通过使用而不是
    模块.provider
    来简化)
  • UI路由器将解析状态的
    resolve
    中的任何项所需的依赖项。当
    resolve
    项是一个函数时,它将尝试通过参数名(称为隐式注释)解析该函数中的任何依赖项。也可以使用内联数组注释
  • 示例(使用隐式注释)

    示例(使用内联数组注释)


    应该使用隐式还是内联数组注释?嗯,这取决于你的项目是如何构建的。如果您的源代码没有缩小(对于生产构建,应该缩小),或者构建管道中有一些模块自动将隐式数组注释转换为内联数组注释,请使用隐式。否则,请使用内联数组。

    看起来您在模块命名方面犯了错误。parkable.app.service应该是project.app.service,或者相反。嗨@cabey77,事实上,在将代码输入StackOverflow时这是一个错误哦,好吧,看起来这会有所帮助。关于需要.provider的一些信息,名称为.Hi@cabey77,我不确定我是否理解它似乎是同一种实现,但我已经在provider前面加上了provider已经阅读过文档的前缀。在那篇文章中还有什么我应该看的吗?哦,等等,我明白了,当你注入时,你需要提供者后缀。所以是UserAuthProviderProvider谢谢,这很有意义。
     angular.module('project.app.route', ['project.app.service'])
        .config(['$stateProvider', '$urlRouterProvider', 'UserAuthServiceProvider', 
            function ($stateProvider, $urlRouterProvider, UserAuthServiceProvider) {
                // configure your UserAuthServiceProvider, if there is anything.
    
                $stateProvider
                    .state('dashboard.index', {
                        url: "/map",
                        templateUrl: "templates/dashboard/map/map.html",
                        controller: 'MapController',
                        controllerAs: 'mapCtrl',
                        resolve: {
                            UserAuth: function(UserAuthService) { return UserAuthService.getUser(); }
                        }
                    });
        });
    
     angular.module('project.app.route', ['project.app.service'])
        .config(['$stateProvider', '$urlRouterProvider', 'UserAuthServiceProvider', 
            function ($stateProvider, $urlRouterProvider, UserAuthServiceProvider) {
                // configure your UserAuthServiceProvider, if there is anything.
    
                $stateProvider
                    .state('dashboard.index', {
                        url: "/map",
                        templateUrl: "templates/dashboard/map/map.html",
                        controller: 'MapController',
                        controllerAs: 'mapCtrl',
                        resolve: {
                            UserAuth: ['UserAuthService', function(UserAuthService) { return UserAuthService.getUser(); }]
                        }
                    });
        });