我有一个非常简单的 Angular 滤镜。
此过滤器接受输入的枚举成员(在此称为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] );
当我在 View 中使用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 ...
}
}
}
即使我的自动补全功能说它存在!
我想使用依赖注入(inject),我可以做
Filters.XEnumToStringFilter()(somethingXEnum)
,但这很糟糕!为什么不能将XEnumToStringFilter用作类型?
有什么更好的解决方法?
最佳答案
那是因为您将函数用作类型声明。您要么:
1)更改服务的构造函数声明:constructor(private xEnumToStringFilter: ( enum: XEnum ) => string )
或者
2)创建一个接口(interface),并在要使用过滤器的地方使用它:
module Filters {
"use strict";
export interface IXEnumToStringFunction {
( input: XEnum ) => string
}
export function XEnumToStringFilter() {
return ( input: XEnum ) => {
return XEnum[input];
}
}
}
...
然后在构造函数中
constructor(private xEnumToStringFilter: Filters.IXEnumToStringFunction )