angular2.0装饰器祥解

什么是装饰器?

装饰器是一个函数,它将元数据添加到类、类成员(属性、方法)和函数参数。

装饰器是一个 JavaScript 的语言特性,装饰器在 TypeScript 里已经实现,并被推荐到了ES2016(也就是ES7)。

要想应用装饰器,把它放到被装饰对象的上面或左边。

Angular 使用自己的一套装饰器来实现应用程序各部件之间的相互操作

@NgModule装饰器

NgModule是一个装饰器函数,它接收一个用来描述模块属性的元数据对象。其中最重要的属性是:

  • declarations - 声明本模块中拥有的视图类。 Angular 有三种视图类:组件指令管道

  • exports - declarations 的子集,可用于其它模块的组件模板

  • imports - 模块声明的组件模板需要的类所在的其它模块。

  • providers - 服务的创建者,并加入到全局服务列表中,可用于应用任何部分。

  • bootstrap - 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置bootstrap属性。



@Component组件装饰器

它把紧随其后的类标记成了组件类

@Component装饰器能接受一个配置对象, Angular 会基于这些信息创建和展示组件及其视图。

@Component的配置项包括:

  • moduleId: 为与模块相关的 URL(例如templateUrl)提供基地址。

  • selector: CSS 选择器,它告诉 Angular 在父级 HTML 中查找<hero-list>标签,创建并插入该组件。 例如,如果应用的 HTML 包含<hero-list></hero-list>, Angular 就会把HeroListComponent的一个实例插入到这个标签中。

  • templateUrl:组件 HTML 模板的模块相对地址,如前所示

  • providers - 组件所需服务的依赖注入提供商数组。 这是在告诉 Angular:该组件的构造函数需要一个HeroService服务,这样组件就可以从服务中获得英雄数据

  • @Component里面的元数据会告诉 Angular 从哪里获取你为组件指定的主要的构建块。

    模板、元数据和组件共同描绘出这个视图

  • @Component扩展了@Directive, 以便@Directive中的配置项也能用在组件上
    moduleId: module.id

    如果设置了,templateUrlstyleUrl会被解析成相对于组件的。

    viewProviders: [MyService, { provide: ... }]

    依赖注入provider的数组,局限于当前组件的视图中。

    template: 'Hello {{name}}'
    templateUrl: 'my-component.html'

    当前组件视图的内联模板或外部模板地址

    styles: ['.primary {color: red}']
    styleUrls: ['my-component.css']

    内联CSS样式或外部样式表URL的列表,用于给组件的视图添加样式。



  • @Injectable装饰器
  • 声明当前类有一些依赖,当依赖注入器创建该类的实例时,这些依赖应该被注入到构造函数中。
    @Pipe({...})装饰器

        声明当前类是一个管道,并且提供关于该管道的元数据


   @Directive装饰器

      声明当前类是一个指令,并提供关于该指令的元数据


     @Input() @Output() @HostBinding @HostListener @ContentChild装饰器

@Input() myProperty;

声明一个输入属性,以便我们可以通过属性绑定更新它。(比如: <my-cmp [my-property]="someExpression">).

@Output() myEvent = new EventEmitter();

声明一个输出属性,以便我们可以通过事件绑定进行订阅。(比如:<my-cmp (my-event)="doSomething()">).

@HostBinding('[class.valid]') isValid;

把宿主元素的属性(比如CSS类:valid)绑定到指令/组件的属性(比如:isValid)。

@HostListener('click', ['$event']) onClick(e) {...}

通过指令/组件的方法(例如onClick)订阅宿主元素的事件(例如click),可选传入一个参数($event)。

@ContentChild(myPredicate) myChildComponent;

把组件内容查询(myPredicate)的第一个结果绑定到类的myChildComponent属性。

@ContentChildren(myPredicate) myChildComponents;

把组件内容查询(myPredicate)的全部结果,绑定到类的myChildComponents属性。

@ViewChild(myPredicate) myChildComponent;

把组件视图查询(myPredicate)的第一个结果绑定到类的myChildComponent属性。对指令无效。

@ViewChildren(myPredicate) myChildComponents;

把组件视图查询(myPredicate)的全部结果绑定到类的myChildComponents属性。对指令无效





@SkipSelf装饰器

在注入器injector层级中的祖先injector中查找 CoreModule,如果没有祖先injector则会提供一个CoreModule实例

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值