I have to use the alert component into different modules A and B in Angular. Even if the implementation is the same for both modules, the tag is recognized as such only in module A. Module B returns in the webbrowser the error:
Uncaught Error: Template parse errors: 'alert' is not a known element:
- If 'alert' is an Angular component, then verify that it is part of this module.
- To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.
The project structure is the following:
app
_directives
alert.component.html
alert.component.scss
alert.component.ts
index.ts
app.module.ts
Module B
moduleB.module.ts
.
.
Module A
moduleA.module.ts
.
.
The index.ts file exports the component:
export * from './alert.component';
In Module B (the working module) the component is imported as following: moduleB.module.ts
import { AlertComponent } from 'app/_directives/alert.component';
.
.
@NgModule({
declarations: [
.
.
AlertComponent,
.
.
The exactly same logic is used for module A where I get the error.
Do you have any ideas how to solve this? Thank you!
CodePudding user response:
If you are going to share components between 2 other modules, you should have a shared module for that component which would also contain similar/related components.
Since your alert component is used in more than one module, we will place it in its own module. This contains the following:
declarations
– this is to declare allcomponents/directives/pipes/etc.
that are in this module.exports
– this is to expose specificcomponents/directives/pipes/etc.
to other modules, anything in declarations but not here will not be accessible by other modules.imports
– this is everything this module needs to operate.
So, here is where we will define the AlertModule
to be use in other modules:
@NgModule({
// These are components that are apart of this module
declarations: [AlertComponent, AlertHeaderComponent, AlertFooterComponent],
// These are components that other modules can use/access from this module
exports: [AlertComponent],
// These are dependencies that this module needs in order to work
imports: [CommonModule, ButtonModule]
})
export class AlertModule {}
Next we just need to import the module here:
@NgModule({
imports: [CommonModule, AlertModule]
})
export class ModuleA {}
And any other module that wants to use the alert:
@NgModule({
imports: [CommonModule, AlertModule]
})
export class ModuleB {}
CodePudding user response:
i will suppose that you know how to create and import modules.
So you need to :
- create a new module for the alert ( don't forget to export your component )
- import the alert module into Module_A , Module_B
- import only Module_A and Module_B into AppModule ( No need to import the alert component )
that's it :)