В последней документации по материалам говорится следующее.
Если вы хотите закрыть пользовательскую закусочную, которая была открыта через openFromComponent, изнутри самого компонента вы можете внедрить MatSnackBarRef.
но они не показывают вам, как это сделать.
В их примере они вкладывают компонент в тот же файл .ts, что и вызывающий модуль, и они не отображают передаваемую ссылку. Но поскольку я хочу использовать более централизованный подход, я создали новый модуль, используя...
ng g component components/snackbar
Таким образом, я должен иметь возможность передать @Input для отображения другого HTML в зависимости от необходимости. Это также позволит таким вещам, как брендинг, несколько кнопок и html-кнопки, закрывать закусочную… до тех пор, пока у них есть доступ к ссылке!
Мой вызов .ts имеет следующее...
var snackBarRef : any;
snackBarRef = this.snackBar.openFromComponent(SnackbarComponent, {data : snackBarRef});
компонент .ts имеет следующий конструктор...
constructor(public snackBar: MatSnackBar, @Inject(MAT_SNACK_BAR_DATA) public data: any) { }
Я ожидаю, что затем смогу создать в компоненте функцию, которая будет воздействовать на закускуBarRef.dismiss(); по мере необходимости. Однако, когда я запускаю приложение, я получаю следующую ошибку...
Uncaught (in promise): Error: StaticInjectorError(AppModule)[SnackbarComponent -> InjectionToken MatSnackBarData]:
StaticInjectorError(Platform: core)[SnackbarComponent -> InjectionToken MatSnackBarData]
Просто чтобы убедиться, что у меня правильная сантехника, я заменил {данные: закускаБарРеф} на {данные: 0}. Делая это, я не вижу никаких ошибок и могу использовать значение данных 0 для других целей, но, конечно, у меня также нет дескриптора ссылки для локального использования.
Есть ли другой способ передать закускуBarRef в компонент, кроме использования раздела данных openFromComponent? или, в качестве альтернативы, есть ли способ передать ссылку через раздел данных, не вызывая ошибки?