我读到了如何在模块的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中引用它,它可以正常工作。我的目标是避免使用范围并仅使用服务。可以吗?
答案 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”对象,我可以确定该服务将被实例化。