Этот вопрос относится к приложению Angular 6, которое использует пользовательский интерфейс Kendo для Angular.
Недавно я работал над динамической глобализацией/локализацией компонентов Kendo DatePicker и TimePicker. В правом верхнем углу сайта, в заголовке, есть раскрывающийся список языков, в котором пользователь может динамически менять язык/язык сайта. Я хотел реализовать способ динамического обновления компонентов Kendo datepicker и timepicker для автоматического перевода текста и обновления форматов DateTime компонента Kendo в соответствии с локалью, которую пользователь выбирает из раскрывающегося списка.
Поэтому я взял компоненты Kendo DatePicker и TimePicker и поместил их в отдельный модуль под названием «DatepickerWrapperModule». И все работает нормально, пока этот модуль активно загружается (т.е. модуль и соответствующий компонент не внедряются динамически на страницу).
Однако, если модуль и соответствующий компонент динамически загружаются на страницу с помощью директивы *ngIf, это нарушает установленную мной динамическую локализацию.
Я предполагаю, что это связано с ленивой загрузкой модуля и, таким образом, созданием новых экземпляров служб, от которых он зависит??? Но, изучив и испробовав много разных вещей, чтобы заставить его работать, я пока безуспешно. Есть ли способ заставить этот тип динамической локализации Kendo UI DatePicker работать с модулями/компонентами, которые динамически загружаются через * ngIf ???
Обычно я бы предоставил все соответствующие примеры кода, но они слишком большие и сложные, чтобы их можно было кратко отобразить в этом вопросе. В общем есть:
- AppModule
- Общий модуль
- и DatepickerWrapperModule
AppModule импортирует SharedModule в массив imports[] с помощью метода forRoot().
Затем SharedModule импортирует DatepickerWrapperModule в массив imports[], а также экспортирует его в массив exports[]. В массиве imports[] DatepickerWrapperModule использует метод forRoot().
Затем DatepickerWrapperModule реализует компонент DatePickerWrapper, который содержит фактические ссылки на компонент Kendo DatePicker.
Кроме того, в конструкторе DatepickerWrapperModule я использую декораторы параметров конструктора @Optional() и @SkipSelf(), чтобы увидеть, загружается ли DatepickerWrapperModule дважды, и с помощью некоторых простых операторов console.log я подтвердил, что он действительно инициализируется и загружается дважды (один раз при начальной загрузке всего приложения/сайта и один раз при выполнении условия *ngIf на конкретной странице и для конкретного рассматриваемого компонента.
Я хотел бы выяснить, как получить модуль/компонент, который загружается с помощью условия *ngIf, чтобы использовать экземпляр DatepickerWrapperModule, который уже загружен как часть всего приложения, вместо того, чтобы создавать новый его экземпляр, когда компонент динамически добавляется в DOM при выполнении условия *ngIf.
Заранее спасибо!