子组件的唯一提供者值

Unique provider value for child component

我正在尝试创建一个可重复使用的日期选择器组件。其中一项功能是您可以选择 periodLevel。例如每月每天或每年。我遇到的问题是,当我从父组件调用此组件时,我使用我在 providers 中放入 useValuedateFormats 变量来操纵周期级别。 在 stackblitz 中,我重现了这种情况,我两次调用 child1 组件,一次是每日级别,一次是每月级别:

两个日期选择器都显示为每月级别 (mm/yyyy),因为 dateFormats 变量针对第二个子组件以这种方式进行了调整。

在 child1 组件内。我在组件的 providers 中使用 dateFormats 变量来操作日期格式。

问题是我不知道如何在 useValue 中使用局部变量来避免对所有子组件重复使用相同的 dateFormats。 stackblitz 示例的预期结果是第一个子组件显示每日级别 (dd/mm/yyyy),第二个子组件显示每月级别 (mm/yyyy)。

https://stackblitz.com/edit/angular-ivy-qpa9x6?file=src/app/app.component.html

通过进行两项调整设法解决了我的问题。

  1. 使用useFactory生成dateFormats变量的唯一实例(在DataService中抽象出来)

  2. MAT_DATE_FORMATS 注入到组件构造函数中的局部变量中,以便能够修改它 --> this.thisDateFormat.

我可以向遇到类似问题的任何人推荐有关提供者的 Angular 大学课程:https://angular-university.io/lesson/angular-di-providers-injection-tokens