在使用角度内置管道(例如Date)或使用custom
管道时,我们需要在组件中使用import语句。例如。
import { DatePipe } from '@angular/common';
但是在模板中,我们可以直接使用它,而不必“导入”“ component”中的任何内容。为什么?
我猜想当将模板转换成“ javascript”时,角度编译器最终会添加import语句,是这样吗? 为什么我们不能对组件做同样的事情?
完全出于好奇
答案 0 :(得分:1)
管道是Angular的声明性功能,就像组件一样。
声明管道时,它将作为声明添加到模块中。
@Pipe({name:'myPipe'})
export class MyPipe implements PipeTransform {
...
}
@NgModule({
declarations: [MyPipe]
})
export class PipesModule {}
字符串值“ myPipe”的行为与组件的选择器非常相似。
Angular提前编译器将解析所有模块并读取所有声明。它将选择器和管道名称收集在一起。
声明提供了创建组件和管道实例所需的工厂功能。
当Angular编译器找到表达式attribute="num | number"
时,由于|
字符,它知道“数字”是指管道。它将在已知的声明列表中搜索工厂函数。
Angular从不使用 import 语句来访问管道或组件。编译器解析模块时,已经找到了它们。