我的应用在Intranet上使用了很多Web服务,而url-s则依赖于服务器环境。
我的应用程序托管在IIS上,它会添加如下所示的HTTP响应标头:Environment: DEV
,因此每个Web应用程序都知道它在哪个服务器环境中运行,因此必须使用哪个内部网服务器来调用所有服务。
我的每个角度应用都使用一种服务,该服务会针对应用程序自己的root发出简单的GET,以获取其中包含环境名称的任何响应,并相应地设置配置。
问题:
角度应用程序应该如何实现这样一个服务,它将作为应用程序中的第一件事执行,并确保在获得第一个响应时,应用程序中的任何内容都不会尝试对其他服务执行HTTP请求,甚至尝试使用我的环境服务提供的任何配置?
有没有办法以角度实现这样的服务,可以阻止应用程序中的每个其他服务/工厂,直到它自己初始化为止?
我在应用程序中有很多其他服务,在我的环境服务完成初始化之前,他们都不知道该怎么做。
更新
从另一个角度来看....是否有可能以角度实现这样的拦截器,可以执行以下操作?:
答案 0 :(得分:1)
角度生命周期可能是一种解决方案。使用angular.config()阶段,您可以查看HTTP服务的标头。
创建一个名为' httpInterceptor'
的工厂function httpInterceptors(siteConfig, $q, $injector) {
return {
response: function(data, status, headers) {
siteConfig.setEnvironment(headers['Environment']);
return data;
}
};
)
然后在angular.config()
中$httpProvider.interceptors.push('httpInterceptor');
如果你真的想要阻止另一个选择是使用UI路由器解析属性来阻止路由加载,直到请求被发送https://github.com/angular-ui/ui-router/wiki,你可以将解析方法添加到根状态。
解决
您可以使用resolve为控制器提供>内容或数据。是国家的习惯。 resolve是依赖关系的可选映射,其>应该注入控制器。
如果这些依赖项中的任何一个是promise,它们将在实例化控制器并触发$ stateChangeSuccess事件之前被解析并转换为值。