如果'<selector>'是Angular组件,则验证它是否是此模块的一部分

Vim*_*mal 85 typescript angular

我是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' }
Run Code Online (Sandbox Code Playgroud)

这是我想要创建的组件.

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

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

export class MyComponentComponent {

}
Run Code Online (Sandbox Code Playgroud)

显示两个错误:

  1. 如果my-component是Angular组件,则验证它是否为此模块的一部分.
  2. 如果my-component是一个Web组件,然后添加CUSTOM_ELEMENTS_SCHEMA@NgModule.schemas该组件来抑制此消息.

请帮忙.

Cya*_*zar 93

您的"MyComponentComponent"应位于"MyComponentModule"中.

在"MyComponentModule"中,您应该将"MyComponentComponent"放在"exports"中.

像这样的东西,见下面的代码.

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

export class MyComponentModule {
}
Run Code Online (Sandbox Code Playgroud)

并将"MyComponentModule"放在"app.module.ts"中的"imports"中(如下所示).

import { MyComponentModule } from 'your/file/path';

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

export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

完成后,应用程序现在可以识别组件的选择器.

您可以在此处了解更多信息:https://angular-2-training-book.rangle.io/handout/modules/feature-modules.html

干杯!

  • 另一个没有直观意义的复杂而令人费解的问题。一如既往地感谢有角度的人。 (7认同)
  • 这对于最新版本的 Angular 不再有效(我在 v.8 上测试过) (5认同)
  • 如果仍然有问题,请不要忘记检查在组件.ts文件中声明的选择器。当您将组件放置在父级的html文件中时,您可能已经忘记在html代码中添加“ app-”。 (4认同)
  • 由于@Input 名称不正确,我遇到了这个错误。非常具有误导性,因此在排除故障时删除组件标签中的输入。 (3认同)

kei*_*ani 17

也许这是html标签组件的名称

你使用这样的html东西<mycomponent></mycomponent>

你必须使用它 <app-mycomponent></app-mycomponent>

  • `html`标签的名称确定`selector`属性.在这种情况下是`my-component`. (8认同)

Joe*_*ene 15

你是在app.module.ts这样导入它并删除指令位: -

@NgModule({
    bootstrap: [AppComponent],
    imports: [MyComponentModule],// or whatever the name of the module is that declares your component.

    declarations: [AppComponent],
    providers: []
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

MyComponentModule应该是这样的: -

@NgModule({
    imports: [],
    exports: [MyComponentComponent],
    declarations: [MyComponentComponent],
    providers: [],
})
export class MyComponentModule {
}
Run Code Online (Sandbox Code Playgroud)

  • 你忘记了`exports` (2认同)

MDM*_*313 8

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

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

我没有收到错误,而是收到警告:

警告:“app-interview”不是已知元素:

  1. 如果“app-interview”是一个 Angular 组件,那么验证它是否是这个模块的一部分。警告:“app-interview”不是已知元素:
  2. 如果“app-interview”是一个 Angular 组件,那么验证它是否是这个模块的一部分。
  3. 如果“app-interview”是一个 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以抑制此消息。

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

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

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


小智 6

filename.component.ts中检查选择器

我会说在各种HTML文件中使用标记

<my-first-component></my-first-component>
Run Code Online (Sandbox Code Playgroud)

应该

<app-my-first-component></app-my-first-component>
Run Code Online (Sandbox Code Playgroud)

@Component({
  selector: 'app-my-first-component',
  templateUrl: './my-first-component.component.html',
  styleUrls: ['./my-first-component.component.scss']
})
Run Code Online (Sandbox Code Playgroud)


kat*_*ibs 6

  1. 宣布你MyComponentComponentMyComponentModule
  2. 将您的属性 添加MyComponentComponentexportsMyComponentModule

mycomponentModule.ts

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

export class MyComponentModule {
}
Run Code Online (Sandbox Code Playgroud)
  1. 将您的属性添加MyComponentModule到您的 AppModuleimports属性中

应用程序模块.ts

    @NgModule({
       imports: [MyComponentModule]
       declarations: [AppComponent],
       providers: [],
       bootstrap: [AppComponent]
    })
    export class AppModule {} 
Run Code Online (Sandbox Code Playgroud)

重要如果您仍然遇到该错误,请从终端停止服务器ctrl+c,然后再次运行ng serve -o