Ionic2-多次调用构造函数和页生命周期
我的应用程序中有一些代码应该只在我的页面上执行一次,但似乎我的所有页面生命周期和构造函数都被多次调用(每x秒调用一次)。例如,我的主页上就没有同样的问题。有什么想法吗?组件和模块如下所示:Ionic2-多次调用构造函数和页生命周期,ionic2,Ionic2,我的应用程序中有一些代码应该只在我的页面上执行一次,但似乎我的所有页面生命周期和构造函数都被多次调用(每x秒调用一次)。例如,我的主页上就没有同样的问题。有什么想法吗?组件和模块如下所示: import { NgModule } from '@angular/core'; import { IonicPageModule } from 'ionic-angular'; import { ChamadaAtendimento } from './chamada-atendimento'; @Ng
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上,但也在构造函数上进行了尝试。不管怎样,我得到了答案。。。我要把它贴在这里吗