2017-10-20 8 views
0

Je veux faire le service toasts global dans mon application avec ses propres styles et html pour les toasts. J'utilise ng2-toastr. Par exemple, j'ai composant A. En vue j'ai bouton:Comment initialiser le composant du service pour les messages de toast

<button (click)="showSuccess()">Click</button> 

dans le contrôleur i ont une fonction showSuccess:

showSucess() { 
    this.toastrService.showSuccess({ 
     enableHTML: true, 
     toastLife: 3000, 
    }); 
    } 

Dans mon ToastrService j'ai ma fonction showSuccess:

import { Injectable } from '@angular/core'; 
    import { ToastsManager } from 'ng2-toastr/ng2-toastr'; 

    @Injectable() 
    export class ToastrService { 
    constructor(public toastr: ToastsManager) {} 
    showSucess() { 
     this.toastr.custom('<span style="color: #bd362f">This message should be in red with blank background. Click to dismiss.</span>', 
     'Custom Message', {dismiss: 'click'}); 
    } 
    } 

this.toastr.custom - dans cette fonction, j'ai défini mon propre modèle de toast. Maintenant, je veux faire un composant avec ce modèle, parce que je veux retirer ce modèle du service.

Comment puis-je remplacer cette chaîne avec HTML avec composant? Je veux remplacer cette chaîne par innerHTML de composant, ou quelque chose comme ça. Je veux partager dans ce composant avec des options toasts du composant du haut de ma question. En AngularJs j'ai utilisé $ templateCache pour obtenir le html du fichier, mais en angular2 + je ne peux pas trouver quelque chose comme ça.

Répondre

0

Je suppose que vous ne pouvez pas utiliser un composant à la place d'une chaîne avec le balisage html. Jetez un oeil here at the source code.

ligne 158 a la méthode personnalisée:

custom(message: string, title?: string, options?: any): Promise<Toast> 

vous devez fournir une chaîne, pas un composant.

Ce que vous pouvez faire est de lire ceci à partir d'un fichier externe, comme un json, en utilisant le HttpClient.

+0

Oui, dans cette fonction, je ne pouvais utiliser que des chaînes. Peut-être dans Angular4 est quelque chose comme ElementRef pour le service, pour avoir accès au composant, ou au composant init du service? –

+0

Peut-être avec DynamicComponentLoader: https://angular.io/guide/dynamic-component-loader mais je ne vois pas pourquoi l'utiliser (trop de développement pour 'seulement' obtenir un balisage html qui pourrait être stocké dans une config/fichier de messages) –