angularjs – Angular Typescript – 在控制器内使用自定义过滤
发布时间:2020-12-17 18:05:55 所属栏目:安全 来源:网络整理
导读:我的角度应用程序(typescript)中有一个自定义过滤器,如下所示: namespace InterACT { export namespace Filters { export class ContractAppliedTo { public static onFilterApplied(contract: Interfaces.IReimbursementContract) { if (contract.services
我的角度应用程序(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过滤器时,我无法让控制器识别它供我使用,或者我猜我的意思是打字稿编译器不会接受它. 我想知道我是否可以使用过滤器服务来获取我的新过滤器的实例,例如: let contractAppliedTo = this.$filter('contractAppliedTo') 但是当我尝试使用它时,我得到一个打字稿错误说 [ts] Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. 我想我错过了一个接口,以便能够在我的控制器中使用这个过滤器. 有人可以进一步建议吗? 谢谢 解决方法
此问题是FilterService无法找到自定义筛选器的调用签名.通过导入自定义过滤器并使用类型断言来反对$filter服务的使用,我能够解决这个问题.
const contractAppliedTo: contractAppliedTo = (<contractAppliedTo>this.$filter('contractAppliedTo')); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |