2

我想将一个组件导入 Angular 4.4.6 中的另一个组件。这可能最终只是一个理论上的答案,这很好。只是想我会伸出手来看看是否有人这样做。我通常只会为组件等创建一个模块,但我真的想删除任何额外的文件 - 试图避免文件异味。

我没有真正的代码可以分享,尽管我正在描绘这样的事情:

@Component({
     selector:'someSelector',
     template:`<html>some html</html>`,
     providers: [someService],
     declarations: [someComponent]  //wanting to do this but I know I can't
})

我这样做已经在整个应用程序的几个地方引入了外部组件,例如与 @ViewChild() 的父/子通信,所以我明白了。只是想知道如果不使我需要在 HTML 中访问的组件全局可用,或者我是否必须创建一个模块并像往常一样导入它,这是否可能。谢谢!!

4

2 回答 2

2

组件declarationsproviders在 Angular 2 RC4 中得到支持。Angular 模块是在 RC5 中引入的,应该完全取代模块中的这个功能。

只是想知道如果不使我需要在 HTML 中访问的组件全局可用,或者我是否必须创建一个模块并像往常一样导入它,这是否可能。

为了在全局范围内不可用,应该在 module 中指定组件/指令,declarations而不是exports. 它的选择器将仅在属于同一模块的组件/指令中编译。

于 2018-04-11T19:19:21.703 回答
1

到 为止Angular 2 RC5,您可以将组件添加到另一个组件directives属性中。

从开始Angular 2 RC5,组件只能在模块中导入。我认为您不会使用以下版本的 Angular,因此您必须将它们导入模块中。

查看文档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?: {...}
  providers?: Provider[]
  exportAs?: string
  queries?: {...}
})
于 2018-04-11T19:13:50.913 回答