Правильный способ запуска обновлений в компоненте, когда служба меняет свое состояние в Angular - PullRequest
0 голосов
/ 01 ноября 2018

Каков рекомендуемый способ запуска обновлений в компоненте, когда служба меняет свое состояние? То есть У меня есть логическое значение (isConnected) в службе, и я хочу обновить представление компонентов со значением этого логического значения. Я чувствую, что это должно быть довольно просто достичь. На данный момент у меня есть субъект rxjs (connectionStatusChange) в службе. Я подписываюсь на этот предмет из компонента.

this.theService.connectionStatusChange.subscribe(connected => {
  this.connected = connected;
  this.cd.detectChanges();
  console.log('subscription triggered in ble component: ' + connected);
});

Почему-то у меня есть , чтобы использовать cd.detectChanges() для этой работы. Разве нет более правильного пути? Благодарен за любые предложения!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Столкнулись с той же проблемой раньше. Проблема возникает, когда модель данных модифицируется, но Angular не обнаруживает модификацию самостоятельно. Следовательно, обнаружение изменений должно запускаться программно. Если что-то подобное происходит, попробуйте уничтожить модель данных и создать ее заново. Например, установив переменную в null или [], а затем присвоив ей данные.

0 голосов
/ 01 ноября 2018

Вам не нужно вызывать detectChanges, Observables в основном используется для обработки асинхронной операции, которая по умолчанию запускает обнаружение изменений.

Возможно, вы используете функцию Ionic / Native, которая будет запускать внутренний код Cordova, т. Е. Выполнение кода происходит за пределами Angular. Нам нужно сообщить Angular для обновления DOM.

Возможное решение:

  • ngZone.run (() => {}) =>, который активирует обнаружение изменений для всего приложения
  • changeDetectorRef.detectChanges () =>, который будет запускать дочерние компоненты и дочерние элементы
  • setTimeout (() => {}) =>, который запускает обнаружение изменений для всего приложения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...