2017-02-13 142 views
1

想象一下像LoggingService這樣的服務,它具有log(msg: string)方法。使用Angular 2依賴注入,組件中的服務實例很容易。然而,我找不到一個可靠的解決方案,可以在任何不是Angular 2組件,服務等的普通類中使用LoggingService。組件,服務等的角度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; 
    } 
} 

假設LoggingServiceAppModule提供。我如何在上面的例子中檢索服務的一個實例?

+2

爲什麼不做個黑名單服務? –

+1

您可以通過編程方式獲取(根)依賴關係注入器的位置,然後在其提供程序註冊表中搜索特定服務,但在您的示例中它沒有意義。如果你在普通的課堂上,而你不在Angular上下文中,那麼你將很難與Angular實體進行交流。就像JB說的,把你的代碼變成服務有什麼問題? – AngularChef

回答

-1

導入它的成分

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

把它在構造函數中:

constructor(private logSvc: LoggingService){} 
+0

標題中提到「組件,服務之外......」 – SilithCrowe

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; 
    } 
} 
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; 
    } 
}