我对angular还不太熟悉,有一个关于提供者重写的问题。我想在我的项目中使用这个日期选择器。
我要重写此库的组件使用的区域设置提供程序。下面是https://www.npmjs.com/package/mydatepicker的例子。
我从库类(my.locale.service.ts)扩展了LocaleService,并希望使用它而不是它,所以我在模块中指定了它:

providers: [{provide: LocaleService, useClass: MyLocaleService }]

但它不起作用,组件仍然使用它自己的localeservice。我怎样才能做到这一点?
谢谢您!

最佳答案

https://angular.io/guide/ngmodule-faq#what-if-two-modules-provide-the-same-service
如果两个模块提供相同的服务呢?当两个导入时
同时加载的模块列出具有相同令牌的提供程序,
第二个模块的提供者“获胜”。那是因为两个供应商
添加到同一喷油器。
当Angular希望为该令牌注入服务时,它会创建和
传递由第二个提供程序创建的实例。
注入此服务的每个类都获取
第二个提供者。即使是在第一个模块中声明的类也会得到
由第二个提供程序创建的实例。这可能是不受欢迎的
惊讶。
如果模块A为令牌“x”提供服务并导入模块B
它还为令牌'x'提供服务,然后是模块a的服务
定义“胜利”。
根appmodule提供的服务优先于
由导入的模块提供的服务。appmodule总是获胜。
如果在AppModule中提供提供程序,则此提供程序将用于导入模块中提供的提供程序。
对于延迟加载的模块,这是不同的。如果在延迟加载的模块中提供提供程序,则此模块延迟加载的组件和服务将从延迟加载模块的提供程序获取依赖项,即使它也在appmodule中提供。

关于angular - Angular2如何覆盖提供者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41685909/

10-11 23:54
查看更多