2017-10-20 9 views
0

自分のアプリケーションでグローバルトーストサービスをしたいと思っています。私はng2-toastrを使用しています。 例えばiがビューにおいて成分Aを有する私はボタンがあります。私のToastrServiceでトーストメッセージのサービスからコンポーネントを初期化する方法

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

私は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'}); 
    } 
    } 
コントローラで

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

を私はshowSuccess機能を有しています

this.toastr.custom - 私は自分のトーストテンプレートを設定しています。 サービスからこのテンプレートを削除したいので、このテンプレートを使用してコンポーネントを実行します。

この文字列をHTMLで置き換えるにはどうすればよいですか?私は、コンポーネントのinnerHTML、またはこのようなものでこの文字列を置き換えたいです。私は私の質問の上からコンポーネントからトーストのオプションでこのコンポーネントの共有をしたい。

AngularJsで私はファイルからHTMLを取得するために$ templateCacheを使用しましたが、angular2では+このようなものは見つかりませんでした。

答えて

0

htmlマークアップで文字列の代わりにコンポーネントを使うことはできないと思います。 見てくださいhere at the source code。あなたは、文字列ではなく、コンポーネントを提供しなければならない

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

ライン158はカスタム方法があります。

これは、HttpClientを使用しているjsonのような外部ファイルから読み取ることができます。

+0

はい、この関数では文字列しか使用できませんでした。 Angular4では、サービスのElementRef、コンポーネントへのアクセス、サービスからのinitコンポーネントのようなものでしょうか? –

+0

多分DynamicComponentLoaderと:https://angular.io/guide/dynamic-component-loaderしかし、私はなぜこれを使用するのかわかりません(あまりにも多くの開発は 'only'のためにhtmlマークアップを取得してconfig /メッセージファイル) –

関連する問題