1
私のアプリケーションには、自分のページで一度だけ実行されるべきコードがいくつかありますが、それは私のページのライフサイクルとコンストラクタのすべてが複数回それは一度呼ばれる)。私はHomePageで同じ問題を抱えていません。何か案は?コンポーネントおよびモジュールは、このようなものです:Ionic2 - コンストラクタとページライフサイクルが複数回呼び出される
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);
}
}
);
}
}
あなたのコンストラクタが何度も呼び出されたことをどうやって知っていますか? – Duannx
@Duannxをこのコードに貼り付けました。私のconsole.logはionViewWillEnterにありますが、コンストラクタでも試しました。とにかく、私の答えを得た...ここに投稿するつもり –