Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unexpected value 'MatSnackBar' imported by the module 'AppModule'. Please add a @NgModule annotation

I wanted to make use of MatSnackBar for displaying notifications on event completion. I imported MatSnackBar in my app module and below is my app.module.ts

...
import { MatSnackBar,
    MatSnackBarConfig, ...
} from '@angular/material';
...

@NgModule({
    declarations: [...],
    imports: [MatSnackBar, MatSnackBarConfig, ...],
    providers: [...],
    bootstrap: [...],
    entryComponents: [...]
})
export class AppModule {
}

Below is my package.json:

{
    "@angular/animations": "^5.1.0",
    "@angular/cdk": "^5.0.0",
    "@angular/cli": "^1.6.1",
    "@angular/common": "^5.1.0",
    "@angular/compiler": "^5.1.0",
    "@angular/compiler-cli": "^5.1.0",
    "@angular/core": "^5.1.0",
    "@angular/forms": "^5.1.0",
    "@angular/http": "^5.1.0",
    "@angular/language-service": "^5.1.0",
    "@angular/material": "^5.0.0",
    "@angular/platform-browser": "^5.1.0",
    "@angular/platform-browser-dynamic": "^5.1.0",
    "@angular/router": "^5.1.0",
    "@swimlane/ngx-charts": "^7.0.1",
    "@types/jasmine": "^2.8.2",
    "@types/jasminewd2": "^2.0.3",
    "@types/node": "^8.0.56",
    "angular2-datatable": "^0.6.0",
    "core-js": "^2.5.1",
    "d3": "^4.10.0",
    "ng-http-loader": "^0.2.0",
    "ng2-charts": "^1.6.0",
    "ng2-handsontable": "^1.0.3",
    "rxjs": "^5.5.5",
    "zone.js": "^0.8.18"
}

Below is the error I'm getting:

compiler.js:485 Uncaught Error: Unexpected value 'MatSnackBar' imported by the module 'AppModule'. Please add a @NgModule annotation.
    at syntaxError (compiler.js:485)
    at eval (compiler.js:15206)
    at Array.forEach (<anonymous>)
    at CompileMetadataResolver.getNgModuleMetadata (compiler.js:15189)
    at JitCompiler._loadModules (compiler.js:34226)
    at JitCompiler._compileModuleAndComponents (compiler.js:34187)
    at JitCompiler.compileModuleAsync (compiler.js:34081)
    at CompilerImpl.compileModuleAsync (platform-browser-dynamic.js:230)
    at PlatformRef.bootstrapModule (core.js:5573)
    at eval (main.ts:11)

I'm using angular material 5.0.0, do I need to use some other version to make use of MatSnackBar?

like image 614
Nagendra Varma Avatar asked Jan 07 '18 05:01

Nagendra Varma


2 Answers

You need to import

import { MatSnackBarModule } from "@angular/material";

and add it under imports

@NgModule({
    imports: [
        MatSnackBarModule,
    ],
    providers: [

    ],
})

refer the issue

like image 103
Sajeetharan Avatar answered Nov 10 '22 14:11

Sajeetharan


Here is what worked for me:
(before I had import errors like File 'angular/app/node_modules/@angular/material/index.d.ts' is not a module.


  1. Import MatSnackBarModule in app.module.ts:

    import { NgModule } from '@angular/core';
    import { MatSnackBarModule } from '@angular/material/snack-bar'; // <= import the module: MatSnackBarMODULE
    
    @NgModule({
      declarations: [ 
     ],
    
     imports: [
         MatSnackBarModule,                                           // <= add it to import list
     ],
    


  1. And where using it, for example in app.component.ts:

    import { MatSnackBar } from '@angular/material/snack-bar'; // <= ⚠️ import the class with path 'material/SNACK-BAR'
    
    // […] 
    
    export class AppComponent {
    
      constructor( private _snackbar: MatSnackBar ) {     // <= add it to constructor
      }
    
      // Use it the way you like it
      fooBar() {
    
          const snack = this._snackbar.open('Hello', 'Action');
          snack
            .onAction()
            .subscribe(() => {
              // Action...
            });
       }        
    }
    



logo StackBlitz

  1. Demo on StackBlitz!
like image 24
Guillaume Avatar answered Nov 10 '22 14:11

Guillaume