обеспечить In: «платформа», но с зависимостями, введенными в root - PullRequest
0 голосов
/ 25 марта 2020

У меня есть приложение angular 9 с сервисом, открывающим закусочную.
, и у меня есть элемент angular, встроенный в мое приложение.
Я пытаюсь позволить элементу angular использовать это сервис, поэтому я внедрил его в «платформу».
Проблема в том, что зависимость этого сервиса (MatSnackBar) предоставляется в MatSnackBarModule, который импортируется в мой AppModule, поэтому я получаю NullInjectorError: Нет провайдера для MatSnackBar.

вот мой код:

import { Injectable } from '@angular/core';
import {
    MatSnackBar, MatSnackBarConfig, MatSnackBarRef, SimpleSnackBar
} from '@angular/material/snack-bar';


@Injectable({ providedIn: 'platform' })
export class ToasterService {

    private ref: MatSnackBarRef<SimpleSnackBar>;
    constructor(private snackbar: MatSnackBar) { }

    commonConfig: MatSnackBarConfig = {
        duration: 3000,
        verticalPosition: 'top',
        horizontalPosition: 'left'
    };

    error(message: string) {
        this.open(message, 'error');
    }
    success(message: string) {
        this.open(message, 'success');
    }

    private open(message: string, panelClass: string) {
        this.ref = this.snackbar.open(
            message, null, { ...this.commonConfig, panelClass }
        );
    }
}

и вот ошибка, которую я получил

main.ts:14 NullInjectorError: R3InjectorError(AppModule)[ToasterService -> ToasterService -> ToasterService -> MatSnackBar]: 
  NullInjectorError: No provider for MatSnackBar!
    at NullInjector.get (http://localhost:4200/vendor.js:67430:27)
    at R3Injector.get (http://localhost:4200/vendor.js:81146:33)
    at injectInjectorOnly (http://localhost:4200/vendor.js:67285:33)
    at Module.ɵɵinject (http://localhost:4200/vendor.js:67295:57)
    at Object.ToasterService_Factory [as factory] (http://localhost:4200/main.js:296:147)
    at R3Injector.hydrate (http://localhost:4200/vendor.js:81382:63)
    at R3Injector.get (http://localhost:4200/vendor.js:81134:33)
    at R3Injector.get (http://localhost:4200/vendor.js:81146:33)
    at R3Injector.get (http://localhost:4200/vendor.js:81146:33)
    at NgModuleRef$1.get (http://localhost:4200/vendor.js:98478:33)

PS эта ошибка возникает даже без элемента angular, но также и при добавлении обычного компонента этот сервис.
PS эта ошибка возникает только тогда, когда я предоставляю сервис в «платформе». Если я предоставляю услугу в 'root', все работает нормально.

Не подходит ли данная функция в 'платформе' для этой ситуации?
Есть ли способ обойти эту проблему?
Кто-нибудь знает другой способ добиться того, что я пытаюсь?

Большое спасибо!

...