我需要为我们的应用程序提供日期格式。我们使用它来设置所有显示和输入日期的格式。
我需要在应用程序的许多地方提供这个。但是,日期因客户而异。我们有一个API调用,它提供了各种设置(其中一个是日期配置)作为JSON对象。
我希望能够通过DI提供一个表示配置选项的对象作为值。有许多提供值的例子,但它们都是静态的而不是动态的。
我想在我的DI组合根
中做这样的事情provide('DateFormat', {
useValue: 'dd/MM/yyyy'
})
但是,我希望'dd / MM / yyyy'来自启动时的设置。
我曾尝试通过服务提供它,但它导致一些地方的竞争条件问题(当一个服务运行时值不可用)。其中一些可以通过使用更多的observable重写它来解决,但它只会使代码更复杂。所以我想通过DI提供一些方法,并在做其他任何事情之前设置值。
任何想法如何实现这一目标?
答案 0 :(得分:0)
如果您在引导程序中提供服务,或者在应用程序的根组件中的提供程序:[]中提供服务,它将实例化该服务。在服务构造函数中,您可以通过api获取数据。
如果您需要等到第一页显示之前加载,您可以有一个observable指示数据是否已加载。使用该observable通过订阅observable来路由到新组件。或者,根据应用程序的结构,在服务设置的布尔值observable上使用* ngIf来显示初始化屏幕,直到api调用返回并初始化数据。
需要该配置的任何其他组件都可以通过构造函数args注入该服务实例。
import {ConfigurationService} from 'path/to/configuration-service';
@Component({
selector : '',
providers: [ConfigurationService] <<-- This instantiates a new
uninitialized service. Do this only in the root component.
})
export ComponentNeedingDateFormat() {
constructor(private configurationService: ConfigurationService) { }
}
如果将其包含在组件提供程序中:[]它将实例化一个新服务。您只想在根组件中注入它。
https://angular.io/docs/ts/latest/guide/dependency-injection.html