【问题标题】:angular 2. Cannot insert one component to another. Template parse errors:...is not a known element角度 2. 不能将一个组件插入另一个组件。模板解析错误:...不是已知元素
【发布时间】:2017-04-28 07:22:43
【问题描述】:

我尝试重复教程中的操作以在另一个组件中添加一个组件,但我失败了。

项目结构:

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 {

}

我打开浏览器并看到以下内容:

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

请指出错误。教程复查了好几遍,都没有发现错误。

【问题讨论】:

  • @Joel Almeida 我在教程中没有看到这个
  • 你是如何声明你的模块的?
  • @Joel Almeida 如果我理解你正确 Rmain.ts 包含此信息
  • 能否提供您的AppModule 代码?

标签: javascript angular


【解决方案1】:

AppComponent 声明中删除 directives:[ TodoListComponent ] 并将此组件的声明添加到模块中,如下所示:

declarations: [AppComponent, TodoListComponent],

将todo-list.component.ts的Url改为

@Component({
    selector: "todo-list",
    templateUrl: "./app/todo-list/todo-list.component.html"
})

【讨论】:

    【解决方案2】:

    删除 app.component.ts 中的“directives”字段并在 app.module.ts 的声明中添加“TodoListComponent”

    你的 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 {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2020-04-19
      • 2020-03-21
      • 2020-02-08
      • 2018-10-15
      • 2021-11-26
      相关资源
      最近更新 更多