2017-02-08 37 views
5

bir denetleyici içinde özel bir filtre kullanılarak aşağıdaki gibi: Diğer dahili gibi benim işaretlemesinde gayet bu filtreyi kullanmak mümkünEğik typescript - Benim açısal uygulama (daktilo versiyonu) özel bir filtre var

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

filtrelerde:

{{rule | contractAppliedTo}} 

şimdi bir denetleyicisi bu filtreyi kullanmak gerekir ve kullanım için referans olarak kullanmak için nasıl mücadele ediyorum.

Bazı denetleyicilerinde açısal tarih filtrelerini zaten kullanıyorum ve bunların yapıcısında ng.IFilterService içine enjekte edip daha sonra kullanmak üzere özel bir değişkene atayım. Benim ContractAppliedTo filtre kullanarak gelince

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

, bana kullanmak için kontrolör tanımasını alamayan ya ne demek typescript derleyici alışkanlık onu almak sanırım.

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

Ama bunu kullanmaya çalıştığınızda, ben

[ts] Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. 
söyleyen bir typescript hatası alıyorum: benim yeni filtrenin bir örneğini, örneğin kapmak için filtre hizmeti kullanmak eğer

merak

Bu filtreyi denetleyicimde kullanabilmek için bir arabirimi kaçırdığımı düşünüyorum.

Daha fazla bilgi verebilir misiniz?

Teşekkür

cevap

0

Bu sorun FilterService özel filtresi için çağrı imza bulamıyorum olmasıdır. Özel filtreyi içe aktararak ve 'u $filter hizmetinin kullanımına karşı kullanarak sorunu çözebildim.

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