加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读