是否可以导入没有模块的组件

时间:2018-04-11 19:11:07

标签: angular angular-aot tree-shaking

我想将组件导入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全局可用的组件,或者我必须创建一个模块并像平常一样导入它。谢谢!

2 个答案:

答案 0 :(得分:2)

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

  

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

为了全局不可用,应在模块declarations中指定组件/指令,而不是exports。它的选择器只能在属于同一模块的组件/指令中编译。

答案 1 :(得分:1)

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

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

查看Documentation,您可以看到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?: {...}
})