角度2中是否不再需要指令元数据?

时间:2017-10-31 22:00:46

标签: angular

我目前正在关注'角度2完整指南'视频课程,每次他需要导入一个组件时,他还要确保将它添加到这样的指令中: `

@Component({
 selector: 'rb-recipe-list',
 templateUrl: './recipe-list.component.html',
 styleUrls: ['./recipe-list.component.css'],
 directives: [RecipeItemComponent]
})

`

但它适用于我,即使我没有指令行。如果我已经在......中导入了该组件,我甚至不确定它的意义。

1 个答案:

答案 0 :(得分:0)

正确,这是多余的,至少在目前的(4.4.6)版本中是这样。

查看当前的meta-data descriptor of @Component

@Component({ 
  changeDetection?: ChangeDetectionStrategy
  viewProviders?: Provider[]
  moduleId?: string
  templateUrl?: string
  template?: string
  styleUrls?: string[]
  styles?: string[]
  animations?: any[]
  encapsulation?: ViewEncapsulation
  interpolation?: [string, string]
  entryComponents?: Array<Type<any>|any[]>
  preserveWhitespaces?: boolean
  // inherited from core/Directive
  selector?: string
  inputs?: string[]
  outputs?: string[]
  host?: {[key: string]: string}
  providers?: Provider[]
  exportAs?: string
  queries?: {[key: string]: any}
})

......以及缺少directives: []

或许值得注意,从上面链接的相同文档:

  

[...] Angular组件是指令的子集。

Furthermore

  

指令必须属于NgModule才能被其他指令,组件或应用程序使用。要指定指令是NgModule的成员,您应该在该NgModule的声明字段中列出它。

因此,指令在NgModule中声明,并且可用于在该模块中声明的所有组件,或延迟加载的子模块。