В компоненте 1, внутри моего ngOnit, я подписываюсь на метод службы, который вызывает БД для некоторых вещей. Загружает мою страницу всего лишь в течение 1,5 секунд. Затем я перейти вперед к странице/2 компонента, который имеет кнопку назад, которые плавают меня обратно, чтобы посмотреть 1.angular2 быстро переходит на маршруты ларьков абонента
backBtn(){
this.router.navigate(['conversationlist'])
}
Вид 1, затем загружает подписчика ngOnit снова, или, по крайней мере, должно быть. Это происходит по большей части, если я медленно перемещаюсь между представлениями. Однако, если я быстро вхожу в представление 1, то backBtn(), метод абонента компонента 1 останавливается и занимает около 20 секунд для загрузки. Это метод, который я вызываю внутри вида 1 ngOnit. Опять же, если я быстро перемещаюсь между страницами, эта функция занимает очень много времени. Однако, если я перейду на страницу 2 со страницы один, подождите несколько секунд, а затем вернитесь назад, как правило, хорошо.
Мысли о том, почему это затормозит или так сильно отстает, когда вы быстро перемещаетесь?
ngOnInit() {
this.getConvAndMessageSub = this._conversationListService.getConversationListAndMessages(0, listBatch).subscribe(
data => {
if(data){
for(let convo of data.conversationList)
{
this.conversationList.push(convo)
}
},
error => {
console.log(error)
})
}
ngOnDestroy(){
this.getConvAndMessageSub.unsubscribe();
}
А вот код услуги:
getConversationListAndMessages(offset, batch){
this.clearConversationList();
const token = localStorage.getItem('token') ? '?token=' + localStorage.getItem('token') : '';
return this._http.get('getConversationList/' + offset + '/' + batch + token)
.map(response => {
const convoList = response.json().data.conversationList;
this.myUser = response.json().data.myUser;
let count = 0;
if(response.json().data.conversationList.length == 0){
return {conversationList:'', myUser:this.myUser}
}
for(let convo of convoList){
this.setupUserObjects(convo);
this.getMessages(convo._id, -1, 0).subscribe(
data => {
convo.messages = data['messages'];
for(let message of data['messages']){
if(message.subscribersSeen.indexOf(myUser.uid) == -1){
convo.unreadCount++;
}
}
},
error => {
console.log(error)
}
);
this.conversationList.push(convo)
count++;
if(count == convoList.length){
return {conversationList:this.conversationList, myUser:this.myUser}
}
}
})
.catch(error => Observable.throw(error.json()));
}
Звучит интересно. Вы пытались удалить подписку на ngDestroy? – Fiddles
Также может быть полезно увидеть немного больше «компонента 1» – Fiddles
Да, я обновил код с более подробной информацией о компоненте 1, и да, я удалил подписку на уничтожение –