Ionic 2 Events adalah dua masalah yang berfungsi

Saya sedang mengembangkan aplikasi pasar virtual. Saya menjalankan acara di menu tab ketika saya menghapus keranjang. Tapi acara ini berfungsi dua kali. Pertama kali saya membuka program ini, ini hanya berfungsi sekali, tetapi ketika saya mengulangi operasi yang sama untuk kedua kalinya, acara tersebut berfungsi dua kali. Bagaimana cara mengatasi masalah ini? Saya Berbagi Kode. Kode Keranjang:

presentConfirm(){
  let alert = this.alertCtrl.create({
    title : 'Sepet Temizlensin mi?',
    message : 'Sepetteki tüm ürünleri silmek istiyor musunuz?',
    buttons : [
      {
        text : 'Hayır',
        role : 'cancel'
      },
      {
        text : 'Evet',
        handler : () => {
          this.sepetiSil();
        }
      }
    ]
  });
  alert.present();
}

sepetiSil(){
  let loader = this.loader.create({
    content : "Lütfen bekleyiniz.."
  });
  let header = new Headers();
  header.append("Content-Type","application/json");
  header.append("Accept","application/json");
  var base_url = "xxxxxxxxx/xxx";
  var veri = JSON.stringify({
    BELGEID : this.globalBelgeID
  });
  loader.present();
  this.http.post(base_url, veri, header).map(res=>res.text()).subscribe(data=>{
      this.sepetArray.pop();
      this.MIKTARMODEL.pop();
      this.URUNTUTARMODEL.pop();
      this.TOPLAMTUTAR = 0;
    
 this.events.publish('sepet:sayacsifirla');
      var mesaj = "Sepet başarıyla temizlendi.";
      loader.dismissAll();
      this.mesajOlustur(mesaj);
  },(error)=>{ loader.dismissAll(); this.sepetiSil(); });
}  

Kode Tab:

this.events.subscribe('sepet:sayacsifirla',()=>{
        this.SEPETSAYISI = 0;
        this.dizi.pop();
        this.SEPETURUNLER.pop();
        console.log(this.dizi);
        console.log("SAYAÇ SIFIRLANDI VE YÖNLENDİRİLME YAPILDI");
        this.app.getRootNav().setRoot(TabsPage);
      });

Seperti yang Anda lihat, acara ini berfungsi dua kali

Konsol tangkapan layar


person Degisim    schedule 19.09.2017    source sumber
comment
apakah permintaan http berjalan dua kali? dimana sepetiSil() dipanggil?   -  person Suraj Rao    schedule 19.09.2017
comment
Saya memasukkannya ke dalam postingan presentConfirm() @suraj   -  person Degisim    schedule 19.09.2017
comment
dan kode berlangganan acara diatur di mana?   -  person Suraj Rao    schedule 19.09.2017
comment
di konstruktor di halaman tab @suraj   -  person Degisim    schedule 19.09.2017
comment
apakah kamu punya ide? @suraj   -  person Degisim    schedule 19.09.2017
comment
Saya punya firasat.. menambahkan sebagai jawaban   -  person Suraj Rao    schedule 19.09.2017
comment
@suraj ya berhasil, terima kasih   -  person Degisim    schedule 19.09.2017
comment
senang mendengarnya :). Pertimbangkan untuk menerima jawaban untuk menutup masalah   -  person Suraj Rao    schedule 19.09.2017


Jawaban (1)


Anda sedang mengatur events.subscribe di konstruktor TabsPage dan Anda juga melakukan:

this.app.getRootNav().setRoot(TabsPage);

Ini membuat tampilan baru yang sepertinya menambahkan pengendali lain ke peristiwa yang sama yang berarti 2 pengendali akan dieksekusi ketika Anda mengeklik sepetiSil() untuk kedua kalinya.

Anda dapat mencoba berhenti berlangganan setiap kali sebelum menetapkan TabsPage sebagai root:

this.events.subscribe('sepet:sayacsifirla',()=>{
        this.SEPETSAYISI = 0;
        this.dizi.pop();
        this.SEPETURUNLER.pop();
        console.log(this.dizi);
        console.log("SAYAÇ SIFIRLANDI VE YÖNLENDİRİLME YAPILDI");
        this.events.unsubscribe('sepet:sayacsifirla');//here
        this.app.getRootNav().setRoot(TabsPage);
      });

Atau gunakan peristiwa siklus hidup halaman untuk berlangganan dan berhenti berlangganan peristiwa tersebut

person Suraj Rao    schedule 19.09.2017