如何在config中使用service /为什么在config中注入了provider实例?

时间:2015-01-20 21:26:35

标签: angularjs angularjs-provider

我读到了如何在模块的cofing方法中注入依赖关系。我为这样的服务创建了提供者

 app.provider("securitySvc", function securitySvcProvider () {
            this.$get = ['Authorizations', '$q', 'routeSvc', function securitySvcFactory (Authorizations, $q, routeSvc) {
                return new securityService(Authorizations, $q, routeSvc);
            }];
        });

当我尝试使用它时,我使用$ get方法而不是newed up securityService获取实例。我做错了什么?

  app.config( ['$routeProvider', 'routes', 'securitySvcProvider', routeConfigurator]);

 function routeConfigurator($routeProvider, routes, securitySvc) {
   // HERE securitySvc is instance with a $get method, not newed up securitySvc
}

请注意,在其他任何地方,在控制器中,都会正确注入securitySvc。

但是,如果按照模块的“run”方法进行操作

app.run(function ($rootScope, securitySvc) {

        $rootScope.hasPermission = function (authorizationName) {
            return securitySvc.hasAuthorization(authorizationName);
        };
}

然后,如果我通过$rootScope.hasPermission在routeConfiguration中引用它,它可以正常工作。我的目标是避免使用范围并仅使用服务。可以吗?

1 个答案:

答案 0 :(得分:0)

虽然问题是为什么提供者的实例被注入到模块的config方法中,而PSL在注释中解释了它,但我真正想要的是找出如何在config方法中使用服务。这就是我实现我想要的方式。我在提供程序上添加了一个方法,提供了我需要的检查。

 app.provider("securitySvc", function securitySvcProvider() {

        var me = this;

        me.$get = ['Authorizations', '$q', 'routeSvc', function securitySvcFactory(Authorizations, $q, routeSvc) {
            me.service = new securityService(Authorizations, $q, routeSvc);
            return me.service;
        }];

        me.hasRoutePermission = function(routeName) {
            return me.service.hasRoutePermission(routeName);
        }

    });

由于此检查附加到路由器上的“resolve”对象,我可以确定该服务将被实例化。