角度过滤器+打字稿

抗癌药

我有一个非常简单的角度滤镜。

此过滤器接受输入的枚举成员(在此称为XEnum),并返回表示枚举成员的字符串:

module Filters {
    "use strict";

    export function XEnumToStringFilter() {
        return ( input: XEnum ) => {
            return XEnum[input];
        }
    }
}

[...]

module Model {
    export enum XEnum{
        Started = 0,
        Stopped = 1
    }
}

[...]

app.filter( "xEnumToStringFilter", [Filters.XEnumToStringFilter] );

当我在视图中使用xEnumToStringFilter时,此方法效果很好:

{{0 | etatTransfertEnumToStringFilter}} 打印 Started

{{1 | etatTransfertEnumToStringFilter}} 打印 Stopped

但是我想在我的服务中使用这个过滤器:

app.service( "serviceUsingXEnum",
        ["xEnumToStringFilter",
            Services.ServiceUsingXEnum] );

但是在我的服务构造函数中,我只会遇到一个奇怪的错误:

module Services {
    "use strict";

    export class ServiceUsingXEnum {

        constructor(
            private xEnumToStringFilter: Filters.XEnumToStringFilter // error here
            ) {
            // some beautiful code ...
        }
    }
}

模块Filters没有导出成员XEnumToStringFilter

即使我的自动完成功能说存在!

我想使用依赖注入,我可以做,Filters.XEnumToStringFilter()(somethingXEnum)但这很糟糕!

为什么不能使用XEnumToStringFilter作为类型?

有什么更好的解决方法?

马塞洛·德·禅

那是因为您将函数用作类型声明。您要么:

1)更改服务的构造函数声明:

constructor(private xEnumToStringFilter: ( enum: XEnum ) => string )

要么

2)创建一个接口,并在要使用过滤器的地方使用它:

module Filters {
    "use strict";

    export interface IXEnumToStringFunction {
          ( input: XEnum ) => string
    }

    export function XEnumToStringFilter() {
        return ( input: XEnum ) => {
            return XEnum[input];
        }
    }
}

...

然后在构造函数中

constructor(private xEnumToStringFilter: Filters.IXEnumToStringFunction )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章