2017-02-09 3 views
5

я получил следующий фрагмент кода Ионного для отображения аварийных сигналов/ошибок в промышленных приложениях:Ионные: Как не складывать несколько уведомлений о тостах?

showError(message: string) { 
    let toast = this.toastController.create({ 
     message: message, 
     position: 'top', 
     duration: 5000, 
     cssClass: 'danger', 
     showCloseButton: true 
    }); 
    toast.present(); 
} 

Приложение вызывает сообщение об ошибке каждый раз, когда он обнаруживает проблемы соединения, которые также будут примерно на второй таймере- ,

Несколько вызовов этого метода приведут к появлению двух или более сообщений об ошибках друг на друга, если время этого кода будет изменено. Могу ли я как-то обнаружить, что тост уже отображается? Кроме того, таймер 5000 мс не понадобится, и я могу просто удалить сообщение об ошибке снова, когда соединение будет восстановлено.

Благодаря и BR Флориан

ответ

4

Вы можете хранить свой объект Toast в переменную за пределами функции, и вызовите метод распускать() перед показом следующий тост:

import { ToastController, Toast } from 'ionic-angular'; 


toast: Toast;  

showError(message: string) { 
    try { 
     this.toast.dismiss(); 
    } catch(e) {} 

    this.toast = this.toastController.create({ 
     message: message, 
     position: 'top', 
     duration: 5000, 
     cssClass: 'danger', 
     showCloseButton: true 
    }); 
    toast.present(); 
} 
+0

Uh да, вы правы ... иногда его слишком очевидно, чтобы пятно lol. Я попробую это ... – flohack

+0

:) Можете ли вы пометить ответ как принятый, если он решит вашу проблему? –

+1

Спасибо, я согласен с flohack, слишком очевидным, чтобы заметить. – wmehanna

1

Вот мое решение: -)

// ToastService.ts 
import { Injectable } from '@angular/core'; 
import { ToastController, Toast } from 'ionic-angular'; 

@Injectable() 
export class ToastService { 

    private toasts: Toast[] = []; 

    constructor(private toastCtrl: ToastController) {} 

    push(msg) { 
    let toast = this.toastCtrl.create({ 
     message: msg, 
     duration: 1500, 
     position: 'bottom' 
    }); 

    toast.onDidDismiss(() => { 
     this.toasts.shift() 
     if (this.toasts.length > 0) { 
     this.show() 
     } 
    }) 

    this.toasts.push(toast) 

    if (this.toasts.length === 1) { 
     this.show() 
    } 
    } 

    show() { 
    this.toasts[0].present(); 
    } 

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