2017-02-08 11 views
5

mam niestandardowy filtr w moim kątowej aplikacji (maszynopis), jak poniżej:kątowa Maszynopis - stosując filtr niestandardowy wewnątrz kontrolera

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; }); 

jestem w stanie użyć tego filtru dobrze w moim znaczników jak inne wbudowane w filtrach:

{{rule | contractAppliedTo}} 

Muszę teraz użyć tego filtra w kontrolerze i mam problem z odniesieniem go do użycia.

Już używam kątowych filtrów daty w niektórych kontrolerach, aw ich konstruktorze wstawiam ng.IFilterService i przypisuję zmienną prywatną do późniejszego użycia.

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'); 
      } 
     } 
    } 
} 

Gdy chodzi o użyciu filtra ContractAppliedTo mój, nie mogę dostać sterownik do uznania go za mnie do używania, albo myślę, co mam na myśli to, że kompilator maszynopis przyzwyczajenie go odebrać.

Zastanawiałem się, czy mogę skorzystać z usługi filtra chwycić wystąpienie mojego nowego filtra, np

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

Ale gdy próbuję go użyć, pojawia się błąd maszynopis mówiąc

[ts] Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. 

Myślę, że brakuje mi interfejsu, aby móc używać tego filtra w moim kontrolerze.

Czy ktoś może doradzić dalej?

Dzięki

Odpowiedz

0

Ten problem jest taki, że nie można znaleźć FilterService podpis połączenia filtru niestandardowego. Udało mi się obejść ten problem, importując niestandardowy filtr i używając type assertion do korzystania z usługi $filter.

const contractAppliedTo: contractAppliedTo = 
     (<contractAppliedTo>this.$filter('contractAppliedTo'));