0

I try to repeat actions from tutorial for adding one component inside another but I am failing.

project structure:

enter image description here

app.component.ts:

import {Component} from "@angular/core"
import {TodoListComponent} from "./todo-list/todo-list.component"

....
@Component({
    moduleId: module.id,
    selector: "app",
    templateUrl: "app.component.html",
    styleUrls: ['app.component.css'],
    directives:[ TodoListComponent ]
})
export class AppComponent {
   ...
}

app.component.html:

...
<todo-list ></todo-list> <!--[todos]="todos"-->
...

todo-list.component.ts

import {Component, Input} from "@angular/core"
//import {Input} from "../../node_modules/@angular/core/src/metadata/directives";

@Component({
    selector: "todo-list",
    templateUrl: "./app/todo/todo-list.component.html"
})
export class TodoListComponent {
    //@Input() todos:Todo[];
}

todo-list.component.html

ololololo

Rmain.ts

import {platformBrowserDynamic} from "@angular/platform-browser-dynamic";

import {AppModule} from "./app.module";

const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);

app.module.ts

import {BrowserModule} from "@angular/platform-browser";
import {NgModule} from "@angular/core";
import {AppComponent} from "./app.component"
import {FormsModule} from "@angular/forms";

@NgModule({
    imports: [BrowserModule, FormsModule],
    declarations: [AppComponent],
    bootstrap: [AppComponent]
})
export class AppModule {

}

I open browser and see following:

zone.js:388 Unhandled Promise rejection: Template parse errors:
'todo-list' is not a known element:
1. If 'todo-list' is an Angular component, then verify that it is part of this module.
2. If 'todo-list' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. ("lass="todo-item" *ngFor="let todo of todos" [ngClass]="{'completed': todo.completed }">-->
        [ERROR ->]<todo-list ></todo-list> <!--[todos]="todos"-->
    </section>
</main>
"): AppComponent@14:8 ; Zone: <root> ; Task: Promise.then ; Value: Error: Template parse errors:(…) Error: Template parse errors:
'todo-list' is not a known element:
1. If 'todo-list' is an Angular component, then verify that it is part of this module.
2. If 'todo-list' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. ("lass="todo-item" *ngFor="let todo of todos" [ngClass]="{'completed': todo.completed }">-->
        [ERROR ->]<todo-list ></todo-list> <!--[todos]="todos"-->
    </section>
</main>
"): AppComponent@14:8
    at TemplateParser.parse (http://localhost:3000/node_modules/@angular/compiler/bundles/compiler.umd.js:7728:21)
    at RuntimeCompiler._compileTemplate (http://localhost:3000/node_modules/@angular/compiler/bundles/compiler.umd.js:17503:53)
    at eval (http://localhost:3000/node_modules/@angular/compiler/bundles/compiler.umd.js:17423:64)
    at Set.forEach (native)
    at RuntimeCompiler._compileComponents (http://localhost:3000/node_modules/@angular/compiler/bundles/compiler.umd.js:17423:21)
    at createResult (http://localhost:3000/node_modules/@angular/compiler/bundles/compiler.umd.js:17319:21)
    at ZoneDelegate.invoke (http://localhost:3000/node_modules/zone.js/dist/zone.js:232:26)
    at Zone.run (http://localhost:3000/node_modules/zone.js/dist/zone.js:114:43)
    at http://localhost:3000/node_modules/zone.js/dist/zone.js:502:57
    at ZoneDelegate.invokeTask (http://localhost:3000/node_modules/zone.js/dist/zone.js:265:35)consoleError @ zone.js:388_loop_1 @ zone.js:417drainMicroTaskQueue @ zone.js:421ZoneTask.invoke @ zone.js:339
zone.js:390 Error: Uncaught (in promise): Error: Template parse errors:(…)consoleError @ zone.js:390_loop_1 @ zone.js:417drainMicroTaskQueue @ zone.js:421ZoneTask.invoke @ zone.js:339

Please point me to the mistake. I rechecked tutorial several times and cannot find mistake.

11
  • Possible duplicate of Angular2 RC6: '<component> is not a known element' Commented Dec 13, 2016 at 9:36
  • @Joel Almeida I don't see this in tutorial Commented Dec 13, 2016 at 9:36
  • how did you declare your module? Commented Dec 13, 2016 at 9:38
  • @Joel Almeida If I understood you correct Rmain.ts contains this onformation Commented Dec 13, 2016 at 9:39
  • Can you please provide your AppModule code? Commented Dec 13, 2016 at 9:41

2 Answers 2

1

remove directives:[ TodoListComponent ] from AppComponent declaration and add declaration of this component to module like this:

declarations: [AppComponent, TodoListComponent],

Change the Url of todo-list.component.ts to

@Component({
    selector: "todo-list",
    templateUrl: "./app/todo-list/todo-list.component.html"
})
Sign up to request clarification or add additional context in comments.

Comments

1

remove the field 'directives' in app.component.ts and add 'TodoListComponent' in declarations at app.module.ts

your app.module.ts

import {BrowserModule} from "@angular/platform-browser";
import {NgModule} from "@angular/core";
import {AppComponent} from "./app.component"
import {TodoListComponent} from "./todo-list/todo-list.component"
import {FormsModule} from "@angular/forms";

@NgModule({
    imports: [BrowserModule, FormsModule],
    declarations: [AppComponent, TodoListComponent],
    bootstrap: [AppComponent]
})
export class AppModule {

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.