私はangular-cliで動くAngular 2プロジェクトに取り組んでいます。第三者のプラグインロジックを角2でカプセル化する方法は?
サードパーティのプラグインを統合する必要があります。どのようなプラグイン関連のロジックをできるだけ多く1つの場所にカプセル化するのがへの最良のアプローチであるのだろうかと疑問に思っています。
私は私のユースケースで問題を説明します:私はサービスにプラグイン関連の初期化と設定ロジックをカプセル化することを決定したhttps://github.com/akserg/ng2-toasty
ので、私:私は、この通知プラグインを実装する必要があります私のプロジェクトで私のNotificationService
抽象を使用してください。これは主に、ライブラリを別のライブラリに変更または交換する必要がある場合に、理想的には、変更を行う必要のある場所が1つしかないためです。
import { Injectable } from '@angular/core';
import { ToastyService, ToastyConfig, ToastOptions } from 'ng2-toasty';
@Injectable()
export class NotificationService {
constructor(
private toastyService: ToastyService,
private toastyConfig: ToastyConfig
) {
this.toastyConfig.theme = 'bootstrap';
}
fireSuccess(msg: string, title: string = 'Success!') {
const toastOptions: ToastOptions = {
title,
msg
};
this.toastyService.success(toastOptions);
}
}
しかし、プラグイン関連のロジックは3つのより多くの場所に分散している(ファイル):ここで
は私notification.service.ts
だ
プラグインのスタイルシートが
angular-cli.json
にインポートされます。{ "apps": [ ... // omitted for brevity { "styles": [ "styles.scss", "../node_modules/ng2-toasty/style-bootstrap.css" ], } ], ... // omitted for brevity }
プラグインのインポート -
ToastyModule.forRoot()
は、私のアプリNgModule
に配置されていますimport { ToastyModule } from 'ng2-toasty'; @NgModule({ imports: [ ToastyModule.forRoot() ], ... // omitted for brevity }) export class AppModule { }
プラグインの
<ng2-toasty></ng2-toasty>
タグが私のアプリ(that's a plugin-related requirement)のいずれかのテンプレートのどこかに配置する必要があります。そこで、私のメインのapp.component.html
にタグを追加しました。notification.service
、angular-cli.json
、app.module.ts
とapp.component.html
:私を悩ます
事がプラグイン関連のロジックが4つのファイルの合計に広がっていることです。
これは私が考えることができる最もカプセル化されたアプローチです。プラグイン関連のロジックを一箇所(おそらくnotification.service
)に移動する方法があるのだろうかと思います。
ので、合計アップするには、私の質問:
が、これは角度2でカプセル化するための最良のアプローチと抽象サードパーティのプラグインですが?
はい、私はコンセプトに悩まされていました。私の一般的なアプローチが正しいかどうかです。あなたが言ったことに基づいて:1)私は 'Notifier'に' NotificationService'の名前を変更します。 2)Notifierコンポーネントを作成し、プラグインスタイルと ' 'タグをリストします。この方法では、使用するファイルが1つ少なくなります( 'angular-cli.json')。それは素晴らしいことです!最後の質問: '@ NgModule'でインポートから抜け出し、何らかの形でNotifierコンポーネントにインポートを行う方法はありますか? –
@KaloyanKosevいいえ、@ @ NgModuleのインポートを取り除く方法はないと信じていますが、一般的に問題ではありません。 'Notifier'はappスコープのモジュールなので、appモジュールにインポートする必要があります。 –
ありがとう!確かに、「Notifier」のインポートはうまく聞こえます。私は実際に '@ NgModule'の' ToastyModule.forRoot() 'インポートを参照していました。私は何とかそれを取り除くことができますかどうか、それはどういうわけか 'Notifier'の中にあるかもしれませんね? –