I'm learning Angular 2+ and I'm having a hard time understanding the role of imports/exports in an ngModule. More specifically why is important to import a module if you're going to import it anyway using es6 syntax as well
import { BrowserModule } from '@angular/platform-browser';
@NgModule({
imports: [ BrowserModule ],
providers: [ Logger ],
declarations: [ AppComponent ],
exports: [ AppComponent ]
})
Wasn't much simpler to detect that the module was imported via es6 syntax?
imports - other modules whose exported classes are needed by component templates declared in this module.
But we're already importing those on the component level. Am I missing something? I'm also looking for some example to why they went for this syntax .
imports? The set of NgModules whose exported declarables are available to templates in this module. exports? The set of components, directives, and pipes declared in this NgModule that can be used in the template of any component that is part of an NgModule that imports this NgModule.
imports: Other modules whose exported classes are needed by component templates declared in this NgModule. providers: Creators of services that this NgModule contributes to the global collection of services; they become accessible in all parts of the app.
Export array − This is used to export components, directives, and pipes which can then be used in other modules. Import array − Just like the export array, the import array can be used to import the functionality from other Angular JS modules.
Angular imports/exports are used to make the content of one module available to be used in another module. Allows you to use the directives from FormsModule and AuthRoutingModule in AuthModule and registers the services provided by these modules in the AppModule scope or the closed lazy-loaded root scope.
The confusion comes from the fact both Angular and ES6 are using the same terminology...
In ES6/TypeScript:
import
keyword.export
keyword.In Angular:
@NgModule
. It serves as a registry (aka container) for all the components, pipes, directives and providers in your application.imports
property of the @NgModule
decorator. It enables an Angular module to use functionality that was defined in another Angular module.exports
property of the @NgModule
decorator. It enables an Angular module to expose some of its components/directives/pipes to the other modules in the applications. Without it, the components/directives/pipes defined in a module could only be used in that module.ES6 modules/imports/exports are very low-level. They are a feature of the ES6 language, just like keywords like const
or let
... In ES6/TypeScript, each file has ITS OWN SCOPE. So whenever you need to use a class/function/variable in a file and that class/function/variable was defined in another file, you must import it (the counterpart being that it must be exported in the file where it was defined). This is not specific to Angular. ALL PROJECTS WRITTEN IN ES6 can use modules/imports/exports in this manner.
On the other hand, Angular's modules/imports/exports are a feature of the Angular framework. They only make sense in Angular world. Other JavaScript frameworks might have similar notions but they'll use a different syntax.
Now there's some overlap between the two. For instance, in order to use a symbol in @NgModule.imports
(Angular world), you need to import
the symbol in the TypeScript file where the module is defined (ES6/TypeScript world):
// ES6/TypeScript Imports import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; @NgModule({ // Angular Imports imports: [ BrowserModule ] })
But if you read the above definitions carefully, you'll realize that the two things are actually quite different. One is the language, the other is the framework.
import { BrowserModule } from '@angular/platform-browser';
will load the file into memory.
@NgModule({
imports: [ BrowserModule ],
will register BrowserModule with Angular.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With