如何在方法中注入服务?

时间:2019-05-21 13:47:17

标签: angular typescript

我有一个自定义类:

class Global {
 public isMobileDevice() {
 }
}

因此,我想在此方法中注入服务类,例如:

public isMobileDevice(private deviceService: DeviceDetectorService): boolean {
    return true;
}

因为我无法将这样的服务注入到这样的构造函数中:

constructor(private deviceService: DeviceDetectorService) {
}

我尝试过:

public isMobileDevice(): boolean {
    return new DeviceDetectorService();
 }

2 个答案:

答案 0 :(得分:2)

通过在要使用的类上使用静态函数(而不是有角服务),可以通过在类上使用静态函数来避免将服务注入组件的构造函数中。

export class Global {
 public static isMobileDevice() {
 }
}

然后,您按如下方式使用它:

import { Global } from '<path_to_global>';

class SomeComponent {
  isMobile = Global.isMobileDevice();
}

答案 1 :(得分:1)

如果要在不使用构造函数的情况下注入服务,则可以在module类中创建一个静态方法,如下所示。

export class GlobalModule {

    static injector: Injector;
    constructor(injector: Injector) {
        GlobalModule.injector = injector;
    }
}

通过injector类,您可以获得DeviceDetectorService

public isMobileDevice(): boolean {
    var deviceDetectorService = GlobalModule.injector.get(DeviceDetectorService);
    // Logic 
}

请确保在应用程序的早期阶段设置了injector属性。