I have an angular site that contains a component inside another component. I\'m using routing and lazy loading the outer component (ComponentA). The inner component (Compone
I was able to get the application running by removing FeatureBModule entirely. Then the FeatureAModule is correct as it needs to then delcare FeatureBComponent.
The FeatureAModule then looks like this:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FeatureAComponent } from './feature-a.component';
import { FeatureARoutingModule } from './feature-a-routing.module';
import { TreeModule } from 'angular-tree-component';
import { FeatureBComponent } from '../feature-b/feature-b.component';
@NgModule({
imports: [
CommonModule,
FeatureARoutingModule,
TreeModule
],
declarations: [
FeatureAComponent,
FeatureBComponent
]
})
export class FeatureAModule {}
I updated the plunker here: https://plnkr.co/edit/mkGH5uG1FGsWWpWbS1Zw?p=preview
You can get this error on directives where you are binding to the attribute that attaches the directive itself, but has the corresponding Input decorated incorrectly.
@Directive({ selector: '[myDirective]' })
export class MyDirective {
@Input('mydirectiveSpelledDifferently') data: any;
}
The input in the example has "mydirectiveSpelledDifferently"
but it should be matching the selector (i.e. "myDirective"
).
You'll know this is the issue in your case when it works this way:
<div myDirective>
But fails this way:
<div [myDirective]="something">
The working case is correctly finding the selector you chose for your directive. The failing case is looking for the @Input()
decoration and failing to because it doesn't exist as @Input('myDirective')
on your directive.
I went back to the start and realised what I missed:
In feature-b.module.ts
I should have exported the component:
exports: [
FeatureBComponent
]
It was also necessary for me to import FeatureBModule
rather than FeatureBComponent
.
import { FeatureBComponent } from '../feature-b/feature-b.component';
import { FeatureBModule } from '../feature-b/feature-b.module';
Had a similar scenario to MMalke. By default Angular adds the prefix app-
to the selector name of a component when the component is generated via the command line interface. I should have written <app-my-component><app-my-component>
but I wrote <my-component><my-component>
instead. FYI, check to make sure the component's selector name matches what's in your HTML.
I just experienced the same, and the problem was that I had the wrong case ('a' vs 'A') for the component.
In my parent component's template, I had:
<mychild-component></mychild-component>
Instead of
<myChild-component></myChild-component>