I have created a custom component which works fine on app.component, but when the <custom-component>
is used in lazy loaded module it gives an error:
Error: Template parse errors:
'my-component' is not a known element:
1. If 'my-component' is an Angular component, then verify that it is part of this module.
2. If 'my-component' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
I'm using Angular 4.0.0 / CLI
Code:
app.module.ts
...
import { LoaderComponent } from './shared/components/list-components/loader/loader.component';
@NgModule({
declarations: [
AppComponent,
LoaderComponent <- declared here because I need the component in multiple modules
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
loader.component.ts
import { Component, OnInit, Input, Output } from '@angular/core';
@Component({
selector: 'my-component',
templateUrl: './loader.component.html',
styleUrls: ['./loader.component.css']
})
export class LoaderComponent implements OnInit {
@Input() type:any;
constructor() { }
ngOnInit() {
}
}
app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: 'lazy', loadChildren: './lazy/lazy.module#LazyModule' },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
app.component.html
<router-outlet></router-outlet>
<my-component></my-component> <-- works here
and lazy.component.html
<p>
this module is lazy loaded
<my-component ></my-component> <- not working
</p>
Any ideas?
* UPDATE *
I created a SharedModule which declares LoaderComponent. The SharedModule is imported in every module which needs the LoaderComponent. Works!
You need to create the LoaderModule:
@NgModule({
imports: [],
exports: [LoaderComponent],
declarations: [LoaderComponent],
providers: [],
})
export class LoaderModule {
}
Then add this module to the app.module
@NgModule({
declarations: [
AppComponent,
],
imports: [
LoaderModule,
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Make sure that you add LoaderModule also to the LazyModule
You are having the LoaderComponent
in your AppModule, but your LazyModule contains the lazy.component.html, that is mistake.
Fix by moving the LoaderComponent should be in Declaration of LazyModule
.
@NgModule({
declarations: [
AppComponent,
LoaderComponent //////////// which module does it belongs to?
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Need more information to elaborate the post to work further.
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