BehaviorSubject (в Ionic Project) ведет себя странно после обновления до последней версии Angular (с 6 по 7 версии)

#angular #typescript #ionic-framework #behaviorsubject

#angular #typescript #ionic-framework #behaviorsubject

Вопрос:

это действительно сводит меня с ума.

Я проверил очень простой проект ionic v4 с потоком входа в систему.

Демонстрационная версия работала отлично, но поскольку этому проекту уже 5 месяцев, я решил создать новый ionic project с последней версией ionic cli и поместить исходный код в новый… с последними стабильными зависимостями ionic.

Но тогда RxJS-BehaviorSubject (authState $) ведет себя совершенно странно, см. Снимок экрана.

Код: https://github.com/meumobi/meu-starter.login-flow.ionic-v4/blob/master/src/app/core/auth/auth.service.ts

Код (я добавил немного консоли.регистрируется методом IsAuthenticated()):

 console.log('isAuthenticated: ', this.authState$.getValue());
console.log('isAuthenticated: ', this.authState$);
  

Консоль:

введите описание изображения здесь

Итак, что произошло:

GetValue() возвращает начальное значение, где, поскольку печатаемый объект содержит правильное значение (true). Мне это кажется странным, поскольку они оба вызываются сразу после друг друга.

Когда я верну версии (на исходный package.json), он снова заработает:

введите описание изображения здесь

Обновление проекта ionic обновило версию angular с версии 6.1 до версии 7.2 (включая ее deps) и TypeScript с 2.9 до 3.1.

RXJS был обновлен с 6.2.2 до 6.3.3.

Было бы действительно здорово, если бы вы могли рассказать мне, что происходит.

Обновить:

Возможно, я отследил это до одной единственной зависимости, которая вызывает эту проблему.

Последнее рабочее: «@ionic / angular»: «4.0.0-beta.17» Не работает: ничего выше, чем @ionic/angular@4.0.0-beta.17 .

При создании нового проекта ionic он поставляется с версией 4.1.0. Что означает, что он не может работать с новым проектом.

Заранее большое спасибо,

Sascha

Ответ №1:

Попробуйте получить прямой доступ к значению

 this.authState$.value
  

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

1. Это тоже не работает. Если я верну все зависимости на старую версию, она снова заработает (с обоими (.value и .GetValue())).

2. Пожалуйста, отправьте свой код в новую ветку в вашем репозитории, и я рассмотрю это

3. github.com/mastix/meu-starter.login-flow.ionic-v4 (Просто запустите npm i и ionic serve). Если вы вошли в систему, вы должны иметь возможность получить доступ к «home». В противном случае «Home» не должен открываться. Если вы хотите, чтобы это работало, измените версию ionic angular с 4.1.2 на «@ionic / angular»: «4.0.0-beta.17».

4. Кстати: я отследил это до одной единственной зависимости, которая вызывает эту проблему. Последнее рабочее: «@ionic / angular»: «4.0.0-beta.17» Не работает: ничего выше, чем @ionic/angular@4.0.0-beta.17 .

Ответ №2:

Вам нужно сделать это как наблюдаемое, чтобы подписаться на данные. Пожалуйста, используйте вот так

  public _auth$:Observable<boolean> =this.authState$.asObservable();
 this._auth.subscribe(data=>{console.log(data);
})
  

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

1. Я не хочу подписываться, поскольку я просто хочу использовать стандартное поведение (не шаблон observer). Таким образом, GetValue() должен быть возможен. Например. смотрите это: medium.com/@luukgruijs /…