2016-11-09 3 views
1

В компоненте 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())); 

    } 
+0

Звучит интересно. Вы пытались удалить подписку на ngDestroy? – Fiddles

+0

Также может быть полезно увидеть немного больше «компонента 1» – Fiddles

+0

Да, я обновил код с более подробной информацией о компоненте 1, и да, я удалил подписку на уничтожение –

ответ

0

После много отладки, я заметил, что я имел некоторые вложенные методы подписчиков. Я отказался от подписки от некоторых, но не всех. После того, как я убедился, что я отказался от подписки на изменение компонента. это фиксировало проблему.

Смежные вопросы