静态方法中的typescript和angular访问服务实例

时间:2018-01-17 23:35:35

标签: angular typescript

我有一个从服务器获取数据对象的服务。还有另一个类是一般的实用类。它有一个静态方法,我想使用服务实例。但由于方法是静态的,这不会起作用。示例代码:

export class DataUtil {
    constructor(public core:CoreStructureService){

    }

    static fetchContact(id:string):ContactModel{
        for(let contact of this.core.contactList){
        if(contact.contactId == id)
            return contact
        }
    }

}

这不会编译,因为for stmt中的this.core.contactList行无效。方法静态我不能把核心称为this.core。 那么我该如何解决这个问题呢。

2 个答案:

答案 0 :(得分:1)

冒着声誉的风险,我将此作为答案发布。

请勿使用core方法访问static服务方法。这很糟糕。而这正是编译器打你的原因。

让您的fetchContact方法成为实例方法而不是静态方法。

export class DataUtil {
    constructor(public core:CoreStructureService){

    }

    fetchContact(id:string):ContactModel{
        for(let contact of this.core.contactList){
        if(contact.contactId == id)
            return contact
        }
    }

}

但是......是的,你可以以非常肮脏,半工作的方式解决它。我故意不描述它。

但是,但是......但是,你正试图做一件坏事。

答案 1 :(得分:0)

如果DataUtil是Angular注入的服务,则在销毁相应的注入器之前不会销毁它。我怀疑你因为类实例化而会遇到性能问题。如果您确实遇到性能问题,请使用常规服务尝试并回到此问题。

有关详细信息,请查看Angular docs