18

我正在使用 Angular 2 CLI,并使用ng generate component MyComponent. 据我所知,我必须将组件添加到装饰器的指令键值对中@Component,但此时打字稿编译失败,说:

ERROR in [default] /Users/Philip/Desktop/Angular2/src/app/app.component.ts:8:2 
Argument of type '{ selector: string; template: any; styles: any[]; directives: typeof MyComponentComponent[]; }' is not assignable to parameter of type 'Component'.
  Object literal may only specify known properties, and 'directives' does not exist in type 'Component'.

这是我的应用程序代码:

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  directives: [MyComponentComponent],
})
export class AppComponent {
  title = 'app works!';
}

我没有接触生成组件的代码,但以防万一:

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

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.css']
})

export class MyComponentComponent implements OnInit {

  constructor() {

  }

  ngOnInit() {
  }

}
4

5 回答 5

34

Angular2 组件装饰器不再使用这些来嵌入其他组件。我们将需要使用一个名为 entryComponents 的新元数据。请参阅下面的示例...

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  entryComponents:[VehicleListComponent]
})

车辆列表组件具有以下组件元数据。

@Component({
  selector: 'app-vehicle-list',
  templateUrl: './vehicle-list.component.html',
  styleUrls: ['./vehicle-list.component.css'],
  providers: [VehicleService]
})
于 2016-09-25T15:25:45.950 回答
18

错误本身表示指令在Component中不存在, 因为它已被弃用。试试下面显示的代码,

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

@NgModule({
   ...
   ...
   declarations:[AppComponent,MyComponentComponent], //<---need to declare 
   schemas:     [CUSTOM_ELEMENTS_SCHEMA]             //<---added this line
})

并从AppComponent中删除指令:[MyComponentComponent]

于 2016-09-15T18:21:23.863 回答
1

如果您使用 Angular CLI,那么新组件将自动导入并添加到 app.module.ts 中 @ngmodule 的声明部分。我们不需要为此编写任何代码。

于 2016-12-08T09:56:27.247 回答
1

运行 create component 命令后,无需对 ANGULAR 4 或更高版本执行任何操作。错误很可能只是您没有使用新组件元数据文件中的正确选择器名称(例如,componentname.component.ts)。

于 2017-12-30T19:35:42.080 回答
0

你有两个选择:

1:在Component里面使用entryComponents标签

2:使用自动导入它的Angular CLI,所以我们不需要显式地为它编写代码。

于 2017-01-06T09:46:22.670 回答