当使用管道中内置的角(例如日期)或如果使用custom
管道时,我们需要导入组件中的语句。例如。
import { DatePipe } from '@angular/common';
但是在模板中,我们可以直接使用它,而不必“导入”‘组件’中的任何内容。为什么?
我猜角编译器在将模板转换为"javascript“时最终会添加导入语句,是这样吗?为什么我们不能对组件做同样的事情呢?
纯粹出于好奇
发布于 2019-02-25 17:02:03
管道就像部件一样,是角度的陈述性特征。
当您声明管道时,它将作为声明添加到模块中。
@Pipe({name:'myPipe'})
export class MyPipe implements PipeTransform {
...
}
@NgModule({
declarations: [MyPipe]
})
export class PipesModule {}
字符串值"myPipe“的作用非常类似于组件的选择器。
提前角编译器将解析所有模块并读取所有声明.它将选择器和管道名称收集在一起。
声明提供了创建组件和管道实例所需的工厂函数。
当角编译找到表达式attribute="num | number"
时,它知道由于|
字符,"number“指的是管道。它将搜索工厂函数的已知声明列表。
角从不使用导入语句来获得对管道或组件的访问。当编译器解析模块时,它已经找到了它们。
https://stackoverflow.com/questions/54876897
复制