У меня есть приложение Angular, использующее ngrx для управления состоянием. В нижнем колонтитуле приложения есть переключатель языка, который использует базовый преобразователь для сохранения значения выбранного языка в localStorage:
export function locale(state, action) {
switch (action.type) {
case 'SET_LOCALE':
localStorage.setItem('xyz-locale', action.payload);
return action.payload;
default:
return localStorage.getItem('xyz-locale') || 'en';
}
};
Приложение использует локаль, сохраненную в localStorage, для выбора правильных переводов для приложения, переводы также сохраняются в состоянии приложения с помощью ngrx (но не сохраняются в localStorage, это просто делается на лету).
Компоненты (использующие модуль нижнего колонтитула в качестве дочернего компонента) затем подписываются на переводы, и они используются в компоненте.
Проблема в том, что когда я переключаю язык, это приводит к сбросу некоторых членов класса компонента. Это происходит только при некоторых обстоятельствах, и я изо всех сил пытаюсь найти причину. Так, например, если у меня есть такой компонент:
export class SomeComponent {
public i18n: I18n;
public data: Data;
constructor(private store: Store<any>) {
store.select('i18n').subscribe((i18n) => this.i18n = i18n);
}
}
Я могу заполнить объект данных нормально, но если я переключу язык в нижнем колонтитуле, объект данных будет сброшен. Я понятия не имею, почему он это делает, и только иногда. Кто-нибудь знает, что происходит?