簡體   English   中英

在 MatDialog 中提供額外的提供者

[英]Provide additional provider in MatDialog

想象一下,您有沒有提供的 Angular 服務,因此它僅在某些組件及其子組件中可用。 現在這樣一個組件打開了 MatDialog —— 是否可以在那里注入該服務?

正如我在默認情況下看到的那樣,Angular 不會將 MatDialog 組件視為調用者組件的子組件,而且我也看不到任何設置來更改它。

這里的 PS 服務是有狀態的,所以只要把它放到 MyDialogComponent 的提供者那里就會創建新的服務,這是不希望的。

您所要做的就是為 dialog.open 方法提供 ViewContainerRef 所需的服務實例所在的位置。 'VERY_IMPORTANT_SERVICE' 將可用於在 'SomeComponent' 中注入。 請參閱下面的代碼

@Component({
    selector: 'cmp',
    providers: [ VERY_IMPORTANT_SERVICE ]
})
export class Component {
    constructor(private dialog: MatDialog, private viewContainerRef: ViewContainerRef) {}

    openDialog() {
       this.dialog.open(SomeComponent, {
           viewContainerRef: this.viewContainerRef
       })
    }
}

如果您不將服務提供到根目錄中,那么您必須在

  • Angular 功能(組件、指令...)
  • 一個Angular模塊

將其提供到功能中意味着每次創建該功能時,都會獲得該服務的一個實例。

如果您在模塊中提供它,則意味着每次創建模塊時,都會創建該服務的一個實例,這對於該模塊中的每個功能都是通用的。

如果您希望將模塊實例提供給您的對話框組件,您可以。 如果您選擇提供的功能,那么您將在對話組件中擁有該服務的新實例(這對於從“父”組件中保留 state 將毫無用處)。

我希望它回答了這個問題,如果沒有,請隨時要求更多解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM