我是Angular2的新手。我试图创建一个组件,但显示一个错误。

这是app.component.ts文件。

import { Component } from '@angular/core';
import { MyComponentComponent } from './my-component.component';

@Component({
  selector: 'my-app',
  template: `
    <h1>Hello {{name}}</h1>
    <h4>Something</h4>
    <my-component></my-component>
  `,
  directives: [MyComponentComponent]
})
export class AppComponent { name = 'Sam' }

这是我要创建的组件。

import { Component } from '@angular/core';

@Component({
selector: 'my-component',
template: `
    <p>This is my article</p>
`
})

export class MyComponentComponent {

}

显示两个错误:

如果my-component是一个Angular组件,那么验证它是否是这个模块的一部分。 如果my-component是Web组件,那么将CUSTOM_ELEMENTS_SCHEMA添加到@NgModule中。模式来抑制此消息。

请帮助。


当前回答

在我的例子中,我已经在其中生成了一个新模块和一个新组件,但是我还没有在component-name.module.ts中添加一些自定义编写的共享模块 文件和适当的路由配置应该添加到component-name.routing.module中。ts文件。检查其他组件的一致性。

其他回答

在MyComponentModule中声明你的MyComponentComponent 将你的MyComponentComponent添加到MyComponentModule的exports属性中

mycomponentModule.ts

@NgModule({
   imports: [],
   exports: [MyComponentComponent],
   declarations: [MyComponentComponent],
   providers: [],
})

export class MyComponentModule {
}

将MyComponentModule添加到AppModule imports属性中

app.module.ts

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

重要的是如果你仍然有这个错误,停止你的服务器从终端ctrl+c,并再次运行ng serve -o

不要导出默认的MyComponentComponent类!

与标题相关的问题,如果不是具体的问题:

我不小心做了一个…

export default class MyComponentComponent {

... 这也把事情搞砸了。

为什么?当我把它放入声明时,VS Code添加了导入到我的模块,但不是…

import { MyComponentComponent } from '...';

它有

import MyComponentComponent from '...';

这并没有向上映射到下游,假设因为它没有在默认导入的任何地方“真正”命名。

export class MyComponentComponent {

没有违约。利润。

在我的例子中,我已经在其中生成了一个新模块和一个新组件,但是我还没有在component-name.module.ts中添加一些自定义编写的共享模块 文件和适当的路由配置应该添加到component-name.routing.module中。ts文件。检查其他组件的一致性。

在我的例子中,我正在为一个使用子组件的组件编写单元测试,并且我正在编写测试以确保这些子组件在模板中:

it('should include the interview selection subview', () => {
    expect(fixture.debugElement.query(By.css('app-interview')))
    .toBeTruthy()  
  }); 

我没有得到一个错误,但一个警告:

警告:“应用面试”不是一个已知的元素: 如果'app-interview'是一个Angular组件,那么验证它是这个模块的一部分。警告:“应用面试”不是一个已知的元素: 如果'app-interview'是一个Angular组件,那么验证它是这个模块的一部分。 如果'app-interview'是一个Web组件,那么将'CUSTOM_ELEMENTS_SCHEMA'添加到'@NgModule '中。这个组件的模式 为了压制这条信息。”

此外,在测试期间,子组件没有在浏览器中显示。

我使用ng g c newcomponent来生成所有的组件,所以它们已经在appmodule中声明了,而不是我正在指定的组件的测试模块。

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ EditorComponent,
        InterviewComponent]
    })
    .compileComponents();
  }));

在我的例子中,我在Shared模块中有一个组件。

组件正在加载并且工作良好,但typescript用红线突出显示html标记,并显示此错误消息。

在这个组件中,我注意到我没有导入rxjs操作符。

import {map} from 'rxjs/operators';

当我添加这个导入时,错误消息消失了。

检查组件内的所有导入。

希望它能帮助到别人。