2019-12-02 15:47:19 -05:00
|
|
|
# Sharing modules
|
2017-07-04 10:58:20 -04:00
|
|
|
|
|
|
|
Creating shared modules allows you to organize and streamline your code. You can put commonly
|
|
|
|
used directives, pipes, and components into one module and then import just that module wherever
|
2021-05-19 15:05:03 -04:00
|
|
|
you need it in other parts of your application.
|
2017-07-04 10:58:20 -04:00
|
|
|
|
|
|
|
Consider the following module from an imaginary app:
|
|
|
|
|
|
|
|
|
|
|
|
```typescript
|
2018-01-17 07:57:43 -05:00
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
|
import { NgModule } from '@angular/core';
|
|
|
|
import { FormsModule } from '@angular/forms';
|
|
|
|
import { CustomerComponent } from './customer.component';
|
|
|
|
import { NewItemDirective } from './new-item.directive';
|
|
|
|
import { OrdersPipe } from './orders.pipe';
|
|
|
|
|
2017-07-04 10:58:20 -04:00
|
|
|
@NgModule({
|
|
|
|
imports: [ CommonModule ],
|
2018-01-17 07:57:43 -05:00
|
|
|
declarations: [ CustomerComponent, NewItemDirective, OrdersPipe ],
|
|
|
|
exports: [ CustomerComponent, NewItemDirective, OrdersPipe,
|
2017-07-04 10:58:20 -04:00
|
|
|
CommonModule, FormsModule ]
|
|
|
|
})
|
|
|
|
export class SharedModule { }
|
|
|
|
```
|
|
|
|
|
|
|
|
Note the following:
|
|
|
|
|
|
|
|
* It imports the `CommonModule` because the module's component needs common directives.
|
|
|
|
* It declares and exports the utility pipe, directive, and component classes.
|
|
|
|
* It re-exports the `CommonModule` and `FormsModule`.
|
|
|
|
|
|
|
|
By re-exporting `CommonModule` and `FormsModule`, any other module that imports this
|
|
|
|
`SharedModule`, gets access to directives like `NgIf` and `NgFor` from `CommonModule`
|
|
|
|
and can bind to component properties with `[(ngModel)]`, a directive in the `FormsModule`.
|
|
|
|
|
|
|
|
Even though the components declared by `SharedModule` might not bind
|
|
|
|
with `[(ngModel)]` and there may be no need for `SharedModule`
|
|
|
|
to import `FormsModule`, `SharedModule` can still export
|
|
|
|
`FormsModule` without listing it among its `imports`. This
|
|
|
|
way, you can give other modules access to `FormsModule` without
|
|
|
|
having to import it directly into the `@NgModule` decorator.
|
|
|
|
|
|
|
|
## More on NgModules
|
|
|
|
|
|
|
|
You may also be interested in the following:
|
|
|
|
* [Providers](guide/providers).
|
2018-01-17 07:57:43 -05:00
|
|
|
* [Types of Feature Modules](guide/module-types).
|