this.pickupStatus.emit не является функцией - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть провайдер, который прослушивает изменения в моей базе данных firestore и изменяет статус статуса запроса на загрузку драйвера.вот моя функция pickuprequest в провайдере моего драйвера

 getDriverPickupRequest(id)
{
this.DriverCollection.doc<Driver>(id).valueChanges()
                .subscribe(data => {
                        this.pickuprequest.changePickupStatus(data.pickupRequest);

} 

Теперь у меня есть служба, которая отслеживает изменения и отправляет их на мою домашнюю страницу.

private pickupRequest = new BehaviorSubject<boolean>(false);
public pickupStatus = this.pickupRequest.asObservable();

changePickupStatus(value: boolean) {
this.pickupStatus.emit(value);
}

constructor(public http: HttpClient) {
//console.log('Hello PickuprequestProvider Provider');

}

Теперь я получаю сообщение об ошибкеговорит, что this.pickupStatus.emit не является функцией.Что не так с кодом?

Ответы [ 3 ]

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

A BehaviorSubject имеет метод next, который используется для передачи новых значений наблюдаемой.

Проблема: Вы звоните emit на pickupStatus, что является Observable, когда вы должны были позвонить next на pickupRequest, что является BehaviorSubject

Fix:

private pickupRequest = new BehaviorSubject<boolean>(false);
public pickupStatus = this.pickupRequest.asObservable();

changePickupStatus(value: boolean) {
  this.pickupRequest.next(value);
}

Используйте this.pickupRequest.next(value);, где мы, по сути, помещаем новое значение в pickupRequest, которое является BehaviorSubject, используя для него метод next.

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

emit метод существует на EventEmitter объект не на BehaviourSubject. Здесь вы показываете поток, используя метод this.pickupRequest.asObservable(). Я считаю, что это самый безопасный способ раскрыть поток, чтобы потребитель этого потока не вставлял данные в поток. В основном для предотвращения утечки абстракции . Если потребитель попытается сделать pickupStatus.next(data), это приведет к ошибке. Это ожидаемое поведение. Таким образом мы предоставляем readonly доступ к потребителю потока.

Для отправки данных по потоку необходимо вызвать метод .next в экземпляре BehaviorSubject, который автоматически волшебным образом позволяет подписчикам знать, что новые данные помещены в поток.

pickupRequest.next(data)
0 голосов
/ 10 ноября 2018

.emit() работает только на EventEmitter, использование .next() в состоянии получения не будет работать, так как Observable только для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...