2017-02-08 7 views
5

コントローラ内部のカスタムフィルタを使用して、以下のように:私は他の組み込みのように私のマークアップでうまくこのフィルタを使用することができる午前角度活字体 - 私は私の角度アプリケーション(typescriptです)でカスタムフィルタを持って

namespace InterACT { 
    export namespace Filters { 
    export class ContractAppliedTo { 
     public static onFilterApplied(contract: Interfaces.IReimbursementContract) { 
     if (contract.services && contract.services.length > 0) { 
      return _.map(contract.services, 'regNumber').join(', '); 
     } else if (contract.operator) { 
      return contract.operator.name; 
     } 
     return contract.scheme.abbreviation; 
     } 
    } 
    } 
} 

angular 
    .module('app.settlement') 
    .filter('contractAppliedTo',() => { return InterACT.Filters.ContractAppliedTo.onFilterApplied; }); 

フィルタ内:

{{rule | contractAppliedTo}} 

このフィルタはコントローラで使用する必要があり、使用方法の参照方法が苦労しています。

私は既にいくつかのコントローラで角型フィルタを使用しています。これらのコンストラクタでは、ng.IFilterServiceに注入し、後で使用するためにプライベート変数に割り当てています。

namespace InterACT { 
    export namespace Controllers { 
    export class MyController { 

     public static $inject = ['$filter']; 
     constructor(
     private $filter: ng.IFilterService 
      ) { 
      } 

      public someFunction =() => { 
       let dateFilter = this.$filter('date'), 
        foo; 

       foo = dateFilter('some-date-string', 'd-M-Y'); 
      } 
     } 
    } 
} 

それは私のContractAppliedToフィルタを使用することになると、私は私が使用するためにコントローラがそれを認識してもらうことができない、または私は私が何を意味するかを推測はtypescriptですコンパイラがそれを拾う習慣です。

let contractAppliedTo = this.$filter('contractAppliedTo') 

しかし、私はそれを使用しようとすると、私は

[ts] Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. 
を言っtypescriptですエラーを取得:

私は例えば、私の新しいフィルタのインスタンスを取得するためのフィルタサービスを使用できる場合、私は疑問に思いました

コントローラでこのフィルタを使用できるようにするために、インターフェイスが不足していると思います。

誰か助言してもらえますか?

おかげ

答えて

0

この問題はFilterServiceは、カスタムフィルタのコールサインを見つけることができないということです。カスタムフィルタをインポートし、type assertionを使用して$filterサービスの使用に対して問題を回避できました。

const contractAppliedTo: contractAppliedTo = 
     (<contractAppliedTo>this.$filter('contractAppliedTo')); 
関連する問題