Why is ngOnInit called twice?
Solution 1:
Why it is called twice
Right now, if an error happens during detecting changes of content/view children of a component, ngOnInit will be called twice (seen in DynamicChangeDetector). This can lead to follow up errors that hide the original error.
This information comes from this github issue
So it seems that your mistake might have an origin elsewhere in your code, related to this component.
Solution 2:
This was happening to me because of a faulty component html. I had forget to close the selector tag in the host component. So I had this <search><search>
, instead of <search></search>
- take note of the syntax error.
So related to @dylan answer, check your component html structure and that of its parent.
Solution 3:
if you used platformBrowserDynamic().bootstrapModule(AppModule);
in app.module.ts comment it and try. I had the same problem. I think this helps
Solution 4:
Well the Problem in my case was the way I was bootstrapping the Child Components. In my @NgModule decorator’s metadata object ,I was passing ‘child component’ in the bootstap property along with ‘parent component’. Passing the child components in bootstap property was resetting my child components properties and making OnInit() fired twice.
@NgModule({
imports: [ BrowserModule,FormsModule ], // to use two-way data binding ‘FormsModule’
declarations: [ parentComponent,Child1,Child2], //all components
//bootstrap: [parentComponent,Child1,Child2] // will lead to errors in binding Inputs in Child components
bootstrap: [parentComponent] //use parent components only
})
Solution 5:
This may happen because you set the AppComponent
as your base route
RouterModule.forRoot([
{ path: '', component: AppComponent } // remove it
])
Note: AppComponent
is called by default in angular
so need not to call it