2017-02-15 17 views
0

いくつかのjavascriptロジックをAngular 2アプリに移動しています。その一部には "formatter"関数の自作ライブラリが含まれています(単にフォーマットする以外にもパイプはオプションではありません)。現在、これらはname(文字列)で渡され、受信関数はwindow [fName]関数リファレンス。角度2関数名を関数参照に変換する

だから、フォーマッタ機能があります:

var tickPositionerYMD = function() { ticks=[]; ... complex logic ... return ticks; } 

、ビルド機能:

build(x, y, formatterName) { 
... 
formatter = window[formatterName]; 
... 
} 

そしてビルドは特定のフォーマッタと呼ばれている:JavaScriptで

build(xData, yData, 'tickPositionerYMD'); 

、窓[]は、関数参照を作成するために使用されます。

Question ... Angular 2コンポーネントでこれを行うにはどうすればよいですか?ウィンドウへの参照を使ってサービスが作成されるアプローチを見たことがあります。これはDIを通して渡されます。

2番目の方法は、名前を指定して関数を返すファクトリ関数を作成することです。

これらの選択肢を考えれば、ファクトリ関数を使う傾向があります。 Angularに新しいことは、私がより良いアプローチを見逃しているかどうか疑問に思っていました。

答えて

0

角度サービスを使用する必要があります。

各サービスはシングルトンなので、コンポーネントに注入すると、すべての情報が同じインスタンスに送られます。

あなたはフォーマッタがあなたのサービスをint型定義するときに、あなたがフォーマッタの方法getFormatter(formatterName)またはマップのいずれかを公開し、このようにそれを使用する必要があります。

// method: 
let formatter = formatterService.getFormatter('myForm'); 

// Map: 
let anotherFormatter = formatterService.formatters['myForm'] 

はちょうどあなたがインスタンス化されていないサービスを注入することを忘れないでください。

関連する問題