StaticInjectorError (AppModule) [MatSnackBar -> Overlay] в Angular / NativeScript Project - Как это исправить? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь перенести мой проект Angular на NativeScript.
Всякий раз, когда я пытаюсь запустить tns run android --bundle, я получаю следующую ошибку:

    JS ERROR Error: Uncaught (in promise): Error:  
       StaticInjectorError(AppModule)[MatSnackBar -> Overlay]:
    JS:   StaticInjectorError(Platform: core)[MatSnackBar -> Overlay]: 
    JS:     NullInjectorError: No provider for Overlay!
    JS: Error: NullInjectorError: No provider for Overlay!

Моя структура выглядит так:

src
  |- app
      |- search
           |- search.component.ts  # MatSnackBar is in here
      |- material
           |- material.module.ts  # MatSnackBarModule import is here
      |- app.module.ts  # imports MaterialModule(^) and OverlayModule`

Просмотр в Интернете не дал ирезультаты для меня.

app.module.ts: 


    import ...

    @NgModule({
      imports: [
        ...
        MaterialModule,
        OverlayModule,
        ...
      ],
      declarations: [
        AppComponent,
        ...
        SearchComponent,
        ...
      ],
      providers: [], 
      bootstrap: [AppComponent],
    })
    export class AppModule {}
material.module.ts:


    import ...  

    @NgModule({
      imports: [
        ...
        MatSnackBarModule,

      ],
      exports: [
        ...
        MatSnackBarModule,

      ],
      declarations: [],
    })
    export class MaterialModule { }
search.component.ts:


    import ...
    import { MatSnackBar } from '@angular/material';
    import { MaterialModule } from '../material/material.module';

    @Component({
        selector: 'app-search',
        templateUrl: './search.component.html',
        styleUrls: ['./search.component.css'],
        providers: [MaterialModule, MatSnackBar]
    })
    export class SearchComponent implements OnInit {
                constructor(private snackBar: MatSnackBar) { }

        openSnackBar() {
            this.snackBar.open('Sorry' , 'Close' , {
                duration: 3000
            });
        }

    }

Интересно, что он правильно работает с ng serve, но не с вышеупомянутой командой.

edit: удаление MatModuls из SearchComponent дает следующееошибка:

JS: ERROR Error: Uncaught (in promise): Error:
    StaticInjectorError(AppModule)[SearchComponent -> MatSnackBar]:  
JS: StaticInjectorError(Platform: core)[SearchComponent -> MatSnackBar]: 
JS: NullInjectorError: No provider for MatSnackBar! 
JS: Error: NullInjectorError: No provider for MatSnackBar!

1 Ответ

1 голос
/ 05 апреля 2019

Удалить providers из @Component

@Component({
    selector: 'app-search',
    templateUrl: './search.component.html',
    styleUrls: ['./search.component.css']
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...