Ngx-bootstrap встроенный datepicker перестает работать после перезагрузки браузера (после установки минимальной и максимальной даты из хранилища)

#javascript #angular #ngrx #ngx-bootstrap

#javascript #угловой #ngrx #ngx-bootstrap

Вопрос:

Я довольно новичок в Angular и довольно долго занимаюсь этой проблемой.

Для контекстуализации приложение вызывает микросервис каждый раз при загрузке страницы, извлекая данные и сохраняя их в состоянии, используя формы ngrx, чтобы то, что видит пользователь, всегда синхронизировалось с данными базы данных.

У меня есть встроенный указатель даты ngx-bootstrap для выбора нескольких дат. Решение, которое я разработал, отлично работает в обычном потоке приложения, но если обновить браузер, datepicker перестает работать (больше не вызывает BSValueChange).

Вещи, которые я знаю:

  • Когда страница перезагружается, наблюдаемая, где я присваиваю значения минимальной и максимальной датам, инициализируется до того, как данные «формы» загружаются в ее состоянии (поэтому, если проверить, является ли оно нулевым);

  • Кроме того, я знаю, что Angular не уничтожает компонент при перезагрузке браузера. У меня возникла проблема, из-за которой не удалось переназначить подобный массив this.myArray = [] , и я нашел обходной путь, объединяющий все элементы для очистки массива, я думаю, что эта статья объясняет почему. Так что, возможно, initDate и EndDate не уничтожаются при перезагрузке и не вызывают какой-либо проблемы (?).

  • Минимальные и максимальные даты правильно назначаются после загрузки «формы» (при обновлении), но указатель даты прерывается.

вот мой код:

   <bs-datepicker-inline 
    [bsValue]="dateSelected" 
    (bsValueChange)="onValueChange($event)"
    [dateCustomClasses]="dateCustomClasses" 
    [bsConfig]="config" 
    [minDate]="initDate" 
    [maxDate]="endDate">
    </bs-datepicker-inline>
  
 export class SorteioPersonalizadoSelectorComponent implements OnInit {

  initDate: Date;
  endDate: Date;
  notifier = new Subject();

  constructor(private localeService: BsLocaleService,
              private store: Store<{form: FormGroupState<RootForm>, sorteio: FormGroupState<Sorteio>}>) {
  }

  ngOnInit() {
    defineLocale('pt-br', ptBrLocale);

    this.config = Object.assign({}, {
      locale: 'pt-br',
      showWeekNumbers: false,
      useUtc: false
    });

    window.onbeforeunload = () => {
        this.notifier.next();
        this.notifier.complete();
    };

    this.store.pipe(select(state => state.form), takeUntil(this.notifier)).subscribe(form => {
      if (form != null amp;amp; form.value.id !== '') {

         //dataInicio and dataFim are stored in state as string values in the format 'yyyy/MM/dd'
         this.initDate = new Date(form.value.participationPeriod.dataInicio);
         this.endDate = new Date(form.value.participationPeriod.dataFim);

       }
    });
 
  }

}
  

Кто-нибудь знает, почему это происходит?

Комментарии:

1. Вы видите какую-либо ошибку консоли?

2. к сожалению, нет