Предоставить дополнительного провайдера в MatDialog - PullRequest
0 голосов
/ 08 октября 2019

Представьте, что у вас есть служба Angular без предоставления услуг, поэтому она доступна только в определенных компонентах и ​​их дочерних элементах. Теперь один такой компонент открывает MatDialog - возможно ли, чтобы этот сервис был введен туда?

Как я вижу по умолчанию, Angular не считает компонент MatDialog дочерним по отношению к компоненту вызывающей стороны, а также я не вижу каких-либо настроек для его изменения.

PS Служба здесь с состоянием, поэтому простоэто для провайдеров MyDialogComponent создаст новый сервис, который не желателен.

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Все, что вам нужно сделать, это предоставить метод 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
       })
    }
}
0 голосов
/ 08 октября 2019

Если вы не предоставляете свою услугу в корне, то вы должны предоставить ее либо в

  • Угловая функция (компонент, директива ...)
  • Угловаяmodule

Предоставление его в функцию подразумевает, что каждый раз, когда эта функция создается, она получает экземпляр этой службы.

Если вы предоставите его в модуле, это означает, что при каждом создании модуля создается один экземпляр этой службы, который будет общим для каждой функции в этом модуле.

Если вы хотите предоставить экземпляр модуля для вашего диалогового компонента, вы можете это сделать. Если вы выберете предоставление функции, то у вас будет новый экземпляр этой службы в вашем диалоговом компоненте (который будет бесполезен для сохранения состояния от вашего «родительского» компонента).

Я надеюсь, что он отвечает на вопрос, и если нет, не стесняйтесь попросить больше объяснений.

...