I am getting the following error in the browser console when trying to run my Angular 2 RC6 app:
> Error: Template parse errors: 'header-area' is not a known element:
> 1. If 'header-area' is an Angular component, then verify that it is part of this module.
> 2. If 'header-area' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schema' of this component
> to suppress this message.("
<div class="page-container">
[ERROR->]<header-area></header-area>
<div class="container-fluid">
> "): PlannerComponent@1:2
I don't get why the component isn't found. My PlannerModule looks like this:
@NgModule({
declarations: [
PlannerComponent,
HeaderAreaComponent,
NavbarAreaComponent,
EreignisbarAreaComponent,
GraphAreaComponent,
nvD3
],
imports: [
RouterModule,
CommonModule,
ModalModule
],
bootstrap: [PlannerComponent],
})
export class PlannerModule {}
and as far as I understood the concept of Modules in ng2, the parts of the modules are declared in 'declarations'. For completeness, here is the PlannerComponent:
@Component({
selector: 'planner',
providers: [CalculationService],
templateUrl: './planner.component.html',
styleUrls: ['./planner.component.styl']
})
export default class PlannerComponent {
}
and the HeaderAreaComponent:
@Component({
selector: 'header-area',
templateUrl: './header-area.component.html',
styleUrls: ['./header-area.component.styl']
})
export default class HeaderAreaComponent {
}
The <header-area>
-Tag is located in planner.component.html:
<div class="page-container">
<header-area></header-area>
<div class="container-fluid">
<div class="row">...
Did I get something wrong?
Update: Complete code
planner.module.ts:
import HeaderAreaComponent from '../header-area/header-area.component';
import NavbarAreaComponent from '../navbar-area/navbar-area.component';
import GraphAreaComponent from '../graph-area/graph-area.component';
import EreignisbarAreaComponent from '../ereignisbar-area/ereignisbar-area.component';
import PlannerComponent from './planner.component';
import {NgModule} from '@angular/core';
import {nvD3} from 'ng2-nvd3';
import {RouterModule} from '@angular/router';
import {CommonModule} from '@angular/common';
import {ModalModule} from 'ng2-bootstrap/ng2-bootstrap';
@NgModule({
declarations: [
PlannerComponent,
HeaderAreaComponent,
NavbarAreaComponent,
EreignisbarAreaComponent,
GraphAreaComponent,
nvD3
],
imports: [
RouterModule,
CommonModule,
ModalModule
],
bootstrap: [PlannerComponent],
})
export class PlannerModule {
// TODO: get rid of the "unused class" warning
}
planner.component.ts
import {Component} from '@angular/core';
import CalculationService from '../_shared/services/calculation.service/calculation.service';
import HeaderAreaComponent from '../header-area/header-area.component';
@Component({
selector: 'planner',
providers: [CalculationService],
templateUrl: './planner.component.html',
styleUrls: ['./planner.component.styl']
})
export default class PlannerComponent {
}
planner.component.html
<div class="page-container">
<header-area></header-area>
<div class="container-fluid">
<div class="row">
<div class="col-xs-2 col-sm-1 sidebar">
<navbar-area></navbar-area>
</div>
<div class="col-xs-10 col-sm-11">
<graph-area></graph-area>
</div>
</div><!--/.row-->
<div class="row">
<div class="col-xs-10 col-sm-11 offset-sm-1">
<ereignisbar-area></ereignisbar-area>
</div>
</div><!--/.row-->
</div><!--/.container-->
</div><!--/.page-container-->
In Angular 9 and 10 we can notice that the “my-element is not a known element” error is missing when our tests don't have all required stubs. Make sure to check debug messages when running tests and add all absent stubs. Otherwise, you will have to update your test suite when the Angular team fixes this bug.
What does "Can't bind to 'x' since it isn't a known property of 'y'" mean? link. This error often means that you haven't declared the directive "x" or haven't imported the NgModule to which "x" belongs. Perhaps you declared "x" in an application sub-module but forgot to export it.
I received this error when I imported Module A into Module B, and then tried to use a component from Module A in Module B.
The solution is to declare that component in the exports
array.
@NgModule({
declarations: [
MyComponent
],
exports: [
MyComponent
]
})
export class ModuleA {}
@NgModule({
imports: [
ModuleA
]
})
export class ModuleB {}
I fixed it with help of Sanket's answer and the comments.
What you couldn't know and was not apparent in the Error Message is: I imported the PlannerComponent as a @NgModule.declaration in my App Module (= RootModule).
The error was fixed by importing the PlannerModule as @NgModule.imports.
Before:
@NgModule({
declarations: [
AppComponent,
PlannerComponent,
ProfilAreaComponent,
HeaderAreaComponent,
NavbarAreaComponent,
GraphAreaComponent,
EreignisbarAreaComponent
],
imports: [
BrowserModule,
RouterModule.forRoot(routeConfig),
PlannerModule
],
bootstrap: [AppComponent]
})
export class AppModule {
After:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
RouterModule.forRoot(routeConfig),
PlannerModule
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Thanks for your help :)
If you have used the Webclipse automatically generated component definition you may find that the selector name has 'app-' prepended to it. Apparently this is a new convention when declaring sub-components of a main app component. Check how your selector has been defined in your component if you have used 'new' - 'component' to create it in Angular IDE. So instead of putting
<header-area></header-area>
you may need
<app-header-area></app-header-area>
I fetch same problem for <flash-messages></flash-messages>
with angular 5.
You just need add below lines in app.module.ts file
import { ---, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FlashMessageModule } from "angular-flash-message";
@NgModule({
---------------
imports: [
FlashMessageModule,
------------------
],
-----------------
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
------------
})
NB: I am using this one for message flash-messages
In your planner component, you must be missing import HeaderAreaComponent like this-
import { HeaderAreaComponent } from '../header-area.component';
//change path according your project
Also, make sure - All the components and pipes must be declared via an NgModule.
See if this helps.
I was facing this issue on Angular 7 and the problem was after creating the module, I did not perform ng build
. So I performed -
ng build
ng serve
and it worked.
The error coming in unit test, when component is out of <router-outlet>
in main app page.
so should define the component in test file like below.
<app-header></app-header>
<router-outlet></router-outlet>
and then needs to add in spec.ts file as below.
import { HeaderComponent } from './header/header.component';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
App`enter code here`Component,
HeaderComponent <------------------------
],
}).compileComponents();
}));
});
Another possible cause of having the same error message is a mismatch between tag name and selector name. For this case:
<header-area></header-area>
tag name must exactly match 'header-area'
from the component declaration:
@Component({
selector: 'header-area',
I had the same problem and i fixed by adding the component (MyComponentToUse) in exports array in the module where my component was declared (ModuleLower). Then i import ModuleLower in ModuleHigher, so i can reuse now my component ( MyComponentToUse) in the ModuleLower and the ModuleHigher
@NgModule({
declarations: [
MyComponentToUse
],
exports: [
MyComponentToUse
]
})
export class ModuleLower {}
@NgModule({
imports: [
ModuleLower
]
})
export class ModuleHigher {}
I had the same issue with angular RC.6 for some reason it doesn't allow passing component to other component using directives as component decorator to the parent component
But it if you import the child component via app module and add it in the declaration array the error goes away. There are no much explanation to why this is an issue with angular rc.6
When I had this problem, it was because I used 'templateUrl' instead of just 'template' in the decorator, since I use webpack and need to use require in it. Just be careful with the decorator name, in my case I generated the boilerplate code using a snippet, the decorator was created as:
@Component({
selector: '',
templateUrl: 'PATH_TO_TEMPLATE'
})
but for webpack the decorator should be just 'template' NOT 'templateUrl', like so:
@Component({
selector: '',
template: require('PATH_TO_TEMPLATE')
})
changing this solved the problem for me.
wanna know more about the two methods? read this medium post about template
vs templateUrl
I got this error when I had a filename and class exported mismatch:
filename: list.component.ts
class exported: ListStudentsComponent
Changing from ListStudentsComponent to ListComponent fixed my issue.
I ran across this exact problem. Failed: Template parse errors:
'app-login' is not a known element... with ng test
. I tried all of the above replies: nothing worked.
NG TEST SOLUTION:
Angular 2 Karma Test 'component-name' is not a known element
<= I added declarations for the offending components into beforEach(.. declarations[])
to app.component.spec.ts.
EXAMPLE app.component.spec.ts
...
import { LoginComponent } from './login/login.component';
...
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
...
],
declarations: [
AppComponent,
LoginComponent
],
}).compileComponents();
...
A newbie mistake was generating the same error message in my case.
The app-root
tag wasn't present in index.html
For me path for templateUrl was not correct
I was using
shopping-list-edit.component.html
Whereas it should have been
./shopping-list-edit.component.html
Silly mistake but happens when starting out. Hope that helps somebody in distress.
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