我的應用程式中有一個 MessageService 在各種模塊中共享,并由顯示這些訊息的組件使用。默認情況下,我會要求使用它的人在組件中提供它,這樣他們就不必輸入鍵來選擇他們想要在串列中顯示的訊息。如果他們想這樣做,服務上的一個簡單布林值告訴演算法是否使用密鑰過濾訊息。
默認情況下,這個名為“isProvidedInComponent”的布林值是true,因為我相信人們不需要以下功能:組件 A 的用例將訊息添加到組件 B(顯示幕)的訊息源。
我想知道Angular中是否有辦法根據提供服務的服務實體的方式自動設定這個布林值:
- 如果服務是在組件中提供的,則為真(因此我們回傳串列中的所有訊息,因為它們適合組件)
- 如果在模塊中提供服務,則為 False(因此我需要我的演算法來過濾給定鍵上的訊息,如果訊息沒有則拋出錯誤)。
uj5u.com熱心網友回復:
將標志添加到您的建構式
@Injectable()
class MessageService {
constructor(private myFlag: boolean) {}
}
并用工廠設定標志
在模塊中它看起來像
providers:[
{
provide: MessageService,
useFactory: () => new MessageService(false),
}
]
在組件中它將是
providers:[
{
provide: MessageService,
useFactory: () => new MessageService(true),
}
]
uj5u.com熱心網友回復:
改變服務“提供”的唯一方法是通過一個模塊:
providers:[
{
provide: MessageService,
useFactory: () => ..., // useValue, useClass, useExisting
}
]
如果您希望根據組件設定服務,則必須創建工廠/外觀,您可以這樣呼叫:
service: MessageService = this.base
.withFilter('some filter')
.withCondition(true);
// ... And so on
constructor(private base: MessageService) {}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516439.html
標籤:有角度的依赖注入
