2013-07-16 7 views
25

イベントを追跡するカスタムフィルタを作成しようとしています。そのため、フィルタはsegmentioサービスのメソッドを呼び出すことができます。angular.jsのカスタムフィルタの依存関係としてサービスを挿入するには?

angular.module('sageApp') 
    .filter('trackEvent', function(segmentio) { 
    return function(entry, category) { 
    segmentio.track(entry, category); 
    } 
}); 

ただし、segmentioサービスは利用できません。どのようにフィルタ依存関係にサービスを挿入する依存関係のアイデアは非常に高く評価されます。

+1

FYI、上記のコードは動作します。 –

答えて

41

試してみてください。

app.filter('sageApp', ['segmentio', function(segmentio) { 
    return function(entry, category) { 
     segmentio.track(entry, category); 
    } 
}]); 
+2

モックを注入する_sageApp_のテストを作成する方法_segmentio_ – shantanusinghal

+0

注入するsegmentioモックサービスで適切なメソッドが呼び出されているかどうかを確認してください。 –

+1

@SatheeshKumarどのようにフィルタの依存関係を模擬しますか?私はフィルタをインスタンス化するときに、モックを渡すように見えません( '$ filter( 'name')'は他の引数を受け付けません)。 – JimmyBoh

3

サービスがテストされ、機能しています。事実、角を使用すると、デバッガを検査する際にクロムの変数がクロージャの中に表示されないことがあります。 console.log(segmentio)を実行したときにうまくいきました。

+0

いつも私に起こります。関数スコープで使われていないものは見えません。関数の外側の変数を調べることができます(この場合、 'return function(...')ですが、一旦あなたのようなダミーコードを書くと'var temp = segmentio'、あなたは何か検査する必要があります。 –

関連する問題