#angular #typescript #ionic-framework #behaviorsubject
#angular #typescript #ionic-framework #behaviorsubject
Вопрос:
это действительно сводит меня с ума.
Я проверил очень простой проект ionic v4 с потоком входа в систему.
Демонстрационная версия работала отлично, но поскольку этому проекту уже 5 месяцев, я решил создать новый ionic project с последней версией ionic cli и поместить исходный код в новый… с последними стабильными зависимостями ionic.
Но тогда RxJS-BehaviorSubject (authState $) ведет себя совершенно странно, см. Снимок экрана.
Код (я добавил немного консоли.регистрируется методом 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 /…