Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic2-多次调用构造函数和页生命周期_Ionic2 - Fatal编程技术网

Ionic2-多次调用构造函数和页生命周期

Ionic2-多次调用构造函数和页生命周期,ionic2,Ionic2,我的应用程序中有一些代码应该只在我的页面上执行一次,但似乎我的所有页面生命周期和构造函数都被多次调用(每x秒调用一次)。例如,我的主页上就没有同样的问题。有什么想法吗?组件和模块如下所示: import { NgModule } from '@angular/core'; import { IonicPageModule } from 'ionic-angular'; import { ChamadaAtendimento } from './chamada-atendimento'; @Ng

我的应用程序中有一些代码应该只在我的页面上执行一次,但似乎我的所有页面生命周期和构造函数都被多次调用(每x秒调用一次)。例如,我的主页上就没有同样的问题。有什么想法吗?组件和模块如下所示:

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ChamadaAtendimento } from './chamada-atendimento';

@NgModule({
  declarations: [
    ChamadaAtendimento,
  ],
  imports: [
    IonicPageModule.forChild(ChamadaAtendimento),
  ],
  exports: [
    ChamadaAtendimento
  ]
})
export class ChamadaAtendimentoModule {}
这是一个组件:

import { Component, OnInit } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { NavParams, NavController, ModalController } from 'ionic-angular';
import { ApiService } from '../../providers/api-service';
import { DialogService } from '../../providers/dialog-service';
import { AuthService } from '../../providers/auth-service';
import { HomePage } from '../home/home';
import { SetMotivoIntervalo } from '../set-motivo-intervalo/set-motivo-intervalo';
import { Platform } from "ionic-angular";
import { NativeAudio } from '@ionic-native/native-audio';

@IonicPage()
@Component({
  selector: 'page-chamada-atendimento',
  templateUrl: 'chamada-atendimento.html',
})
export class ChamadaAtendimento {

  chamada_id : number;
    area : string = "";
    atividade : string = "";
  resposta_enviada : boolean = false;

  constructor(
    navParams: NavParams,
    private nav: NavController,
    private api: ApiService,
    private dialog: DialogService,
    private auth: AuthService,
    private platform: Platform,
    private nativeAudio: NativeAudio,
    private modalCtrl: ModalController
  ) {

    this.chamada_id = navParams.data.chamada_id;
    this.area = navParams.data.area;
    this.atividade = navParams.data.atividade;

    if (this.platform.is('cordova')) {
      this.nativeAudio.preloadSimple('chamada', 'assets/sounds/Umbriel.mp3');
      this.nativeAudio.loop('chamada');
    }

  }


  ionViewWillEnter(){
    console.log("page lifecycle test");
  }


  responderChamada(resposta){

    console.log("resposta ",resposta),
    console.log("resp enviada",this.resposta_enviada);
    if(!this.resposta_enviada){

      this.resposta_enviada = true;

      if (this.platform.is('cordova')) {
        this.nativeAudio.stop('chamada');
        this.nativeAudio.unload('chamada');
      }

      if(resposta=="Intervalo"){
        const modal = this.modalCtrl.create(SetMotivoIntervalo, {chamada_id: this.chamada_id});
        modal.present();
      }else{
        this.dialog.showLoading("Enviando resposta...");
        this.api.responder_chamada(this.chamada_id, resposta).subscribe(
            () => {
            this.dialog.loading.dismiss();
            this.auth.setStatusAtual(resposta);
            if (resposta=="Atendimento"){
              this.auth.setChamada(this.chamada_id, this.area, this.atividade);
            }else{
              this.nav.setRoot(HomePage);
            }

            if(resposta=="Inativo"){
              this.dialog.showToast("Status de Operação definido como Inativo");
            }else{
              this.dialog.showToast("Resposta enviada com sucesso");
            }

            },(error) =>{
            this.dialog.loading.dismiss();
            if(error && error.length){
              this.dialog.showAlert("Erro ao responder chamada", error);
            }
            }
        );
      }

    }

  }


  encerrarAtendimento(){
    this.dialog.showLoading("Encerrando atendimento...");
    this.api.encerrar_atendimento(this.chamada_id).subscribe(
      () => {
        this.dialog.loading.dismiss();
        this.auth.setChamada(null, null, null);
        this.nav.setRoot(HomePage);
        this.dialog.showToast("Atendimento encerrado com sucesso");
      },(error) => {
        this.dialog.loading.dismiss();
        if(error && error.length){
          this.dialog.showAlert("Erro ao encerrar atendimento", error);
        }
      }
    );
  }

}
我的答案是:
我的
应用程序组件上有一个
设置间隔
,它每x秒调用一个函数。每次调用该函数时,似乎它都会替换组件,因此它必须重新构造,或者类似的,不确定。不管怎么说,我的解决办法是对该页面进行
clearInterval
。但是仍然不太清楚发生了什么

你怎么知道你的构造函数被多次调用?@duanx在我粘贴的代码中,我的console.log在ionViewWillEnter上,但也在构造函数上进行了尝试。不管怎样,我得到了答案。。。我要把它贴在这里吗