Angular中的Annotation和Decorator之间有什么区别
虽然注释和装饰器在Angular中都有相同的@
符号,但它们都是不同的语言特性。
注释:这些是硬编码的语言特征。注释只是在类上设置的元数据,用来反映元数据库。当用户注释一个类时,编译器会在该类上创建一个名为annotations的属性,在其中存储一个annotation数组,然后尝试实例化一个与注释同名的对象,将元数据传入构造函数。注释在AngularJs中没有预定义,所以我们可以自己命名它们。
- 示例:
@ComponentAnnotation
注释的特点:
- 注释是硬编码的。
- 注释被AtScript和Traceur编译器所使用。
- 注释反映元数据库
注意:现在AngularJs从AtScript切换到TypeScript,但现在也支持Annotations。
例子:这里组件被注释为ComponentAnnotation,并进一步使用。
import {
ComponentAnnotation as Component,
} from '@angular/core';
export class ComponentAnnotation extends DirectiveMetadata {
constructor() {
}
}
装饰器:一个装饰器是一个为类、其成员或其方法参数添加元数据的函数。装饰器只是一个让你访问需要被装饰的目标的函数。有四种类型的装饰器,它们都在下面提到。
装饰器的类型:
- 类装饰器,如@Component、@NgModule
- 属性装饰器,如@Input和@Output
- 方法装饰器如@HostListener
- 参数装饰器如@Injectable
装饰器的特点:
- 装饰器在AngularJs中是预定义的。
- 装饰器是由TypeScript编译器使用的。
- 装饰器是用来给类、对象和方法附加元数据的。
示例:
import { Component } from '@angular/core';
@Component({
selector: 'hi',
template: '<div>GeeksForGeeks</div>',
})
export class Geeks{
constructor() {
console.log('GeeksForGeeks');
}
}
注释和装饰器的区别:
注释 | 装饰器 |
---|---|
被Traceur编译器使用 | 被Typescript编译器使用 |
注释只是使用Reflect Metadata库在类上设置的元数据。 | 装饰器对应于在类上调用的一个函数。 |
注释是用来创建一个存储数组的属性注释。 | 装饰器是一个获得需要被装饰的对象的函数。 |
它们是硬编码的 | 它们不是硬编码的 |
注释的进口:从’@angular/core’中导入{ComponentAnnotation as Component}; | 装饰器的进口:从’@angular/core’中导入{Component}。 |
结论:AngularJS中的Annotations和Decorators之间有一个非常明显的区别。Angular支持Decorators和Annotations。这是一个传统的东西,因为Angular2从AtScript换成了TypeScript。Decorators在AngularJs中是默认的,但你也可以使用Annotations。