在角度中,如何在不使用导入的情况下在角度模板中使用管道?

时间:2019-02-26 00:42:13

标签: angular typescript

在使用角度内置管道(例如Date)或使用custom管道时,我们需要在组件中使用import语句。例如。

import { DatePipe } from '@angular/common';

但是在模板中,我们可以直接使用它,而不必“导入”“ component”中的任何内容。为什么?

我猜想当将模板转换成“ javascript”时,角度编译器最终会添加import语句,是这样吗? 为什么我们不能对组件做同样的事情?

完全出于好奇

1 个答案:

答案 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 语句来访问管道或组件。编译器解析模块时,已经找到了它们。