2017-02-28 82 views
3

我明白一个申报:Angular 2 - 什么是可声明的?

  • 要么是一个部件,指令或管
  • 可以添加到一个模块的declarations阵列
  • 属于一个,且仅一个模块

但究竟一个可申报的?一个服务类属于一个模块,那么为什么服务类不是可声明的?或者更一般地说,在模块内部声明什么意思?

回答

2

declarations使Angular知道选择器和管道名称。
编译组件模板时,它在当前模块和导入模块的声明中查找匹配的组件,指令和管道,以便将它们应用于选择器和管道名称匹配的元素。

2

声明允许角度编译器知道哪个模块实际上将包含组件,指令或管道。

由于编译器生成制作视图的工厂,它会将这些组件与它们声明的模块进行集成,并且仅在可能使用它们的任何其他模块中引用它们。

这就是为什么您只希望每个组件,管道和指令只能在最多一个模块中声明。

服务与其他服务放在一起,并根据需要由其他工具(如webpack)引用,或者在某些情况下由浏览器间接引用。角编译器不需要编译服务代码,它只是将它们用作普通的JavaScript代码。

编辑:指定服务不需要由角编译器编译。当然,如果它是打字稿,它仍然会被编译,但是打字稿编译器不是有角度的。