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

У меня есть один метод, подписанный в ngOnInit controller.ts.В представлении есть возможность выбрать другого пользователя из списка, который перенаправляет на ту же страницу, только ID из URL изменяется.Следовательно, ngOnInit вызывается несколько раз.Следовательно, метод подписывается несколько раз.Сколько раз мы выбираем разных пользователей, метод вызывается для каждого номера выбранного члена, т. Е. Если мы выбираем 3 пользователей один за другим, маршрут меняется 3 раза, следовательно, метод вызывается 3 раза, когда наблюдаемый получает результат. Но если мы обновляем страницувсе отлично работаетно если бы я использовал отписаться в ngDestroy, то он не будет снова подписан в ngOnInit.Есть ли какое-либо решение для этого.

 ngOnInit() { 
    this._myService.detailsReceived.subscribe((obj: details) => 
       {console.log(obj.text)}
    );
 }

изменение маршрута на той же странице:

this.route.navigate(['user-home', userid]);

Я требую, чтобы этот метод оставался подписанным до тех пор, пока пользователь не выйдет из системы, следовательно, использование canonot subscribe.Take(1)

1 Ответ

0 голосов
/ 17 октября 2018

но если я использовал отписаться в ngDestroy, то он не будет снова подписан в ngOnInit

Из комментариев:

ngOnDestroy() { this._myService.detailsReceived.unsubscribe(); } Я использовал это,Это неправильный способ отписаться?

Вы не правильно отписываетесь.Вы должны отписаться от Subscription, , а не Observable.Отказ от подписки на наблюдаемое вызывает именно то поведение, которое вы описали.

// import 
import { Subscription } from 'rxjs';

///////

// In the component
detailRecivedSubscription: Subscription;
ngOnInit() { 
    this.detailRecivedSubscription = this._myService.detailsReceived.subscribe((obj: details) => 
       {console.log(obj.text)}
    );
}
ngOnDestroy() { 
    this.detailRecivedSubscription.unsubscribe();
}

Также в этом сценарии также может иметь больше смысла подписываться на эту услугу в компоненте / a корневого уровня.

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