0

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

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

当我尝试使用它时,我使用 $get 方法而不是新的 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 都被正确注入。

但是,如果遵循模块的“运行”方法

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

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

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

4

1 回答 1

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);
        }

    });

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

于 2015-01-21T15:21:27.747 回答