组件,服务等之外的Angular 2服务注入

时间:2017-02-13 18:09:14

标签: angular dependency-injection

想象一下像LoggingService这样的服务,它有一个log(msg: string)方法。使用Angular 2依赖注入,很容易在组件中拥有服务实例。但是,我找不到一个可靠的解决方案,让LoggingService在任何不是Angular 2组件,服务等的普通类中。

E.g。该应用程序有一个文件blacklist.ts,其中包含:

export class Blacklist {
    isBlacklisted(name: string): boolean {
        let result = false;

        if(value == "Alice" || value == "Bob") {
            result = true;
            LoggingService.log("Name'" + name + "' is blacklisted");
        }

        return result;
    }
}

假设LoggingService中提供了AppModule。如何在上面的示例中检索服务实例?

3 个答案:

答案 0 :(得分:0)

LoggingService都是静态类 这样你就可以在没有实例的情况下使用它 或者你需要和它的实例来调用方法

  

整个目的是支持可重用性   像这样使用

import {LoggingService} from 'path/to/service'
export class Blacklist {
    private loggingService:LoggingService;
    isBlacklisted(name: string): boolean {
        let result = false;

        if(value == "Alice" || value == "Bob") {
            result = true;
            this.loggingService.log("Name'" + name + "' is blacklisted");
        }

        return result;
    }
}

答案 1 :(得分:0)

我现在将TypeScript decorators用于此目的:

export class Blacklist {

    @logger
    logger: LoggingService;

    isBlacklisted(name: string): boolean {
        let result = false;

        if(value == "Alice" || value == "Bob") {
            result = true;
            this.logger.log("Name'" + name + "' is blacklisted");
        }

        return result;
    }
}

答案 2 :(得分:-2)

将其导入组件

import {LoggingService} from 'path/to/service';

将它放在构造函数中:

constructor(private logSvc: LoggingService){}