Angular装饰器学习笔记

学习内容为慕课网Angular教学视频

一、Angular(Typescript)装饰器

1.1 简介

  • 装饰器就是一个函数
  • 他是一个返回函数的函数
  • 它不是angular的特性,他是的一个特性
  • 函数的入参分别为 targe、name 和 descriptor
  • 执行该函数后,可能返回 descriptor 对象,用于配置 target 对象

1.2 Typescript装饰器的分类:

  • 类装饰器 (Class decorators)
  • 属性装饰器 (Property decorators)
  • 方法装饰器 (Method decorators)
  • 参数装饰器 (Parameter decorators)

二、如何实现一个装饰器

2.1 实现一个@Emoji()的装饰器,能够让传入的字符串两边加上标签符合

export function Emoji() {
    return (target: Object, key: string) {
        let val = target[key];      
        const getter = () => {
            return this.val;
        };  
        const setter = () => {
            val = `表情${value}表情`
        };
        Object.defineProperty(target, key, {
            get: getter,
            set: setter,
            enumerable: true,
            configurable: true
        })
    }
}

## 如何使用
+ @Emoji() Result = 'hello';
+ {{ result }} 页面显示为:表情hello表情

2.1 实现一个@Confirmable()装饰器, 弹窗确认对话框

export function Confirmable(message: string) {
    return (target: Object, key: string, descriptor: PropertyDescriptor) {
        const origin = descriptor.value;
        descriptor.value = function(...args:any) {
            const allow = window.confirm(message);
            if (allow) {
                const result = origin.apply(this, args);
                return result;
            }
            return null;
        };
        
        return descriptor;
    }
}

## 在方法前加上这个装饰器
@Confirmable('确定要点击吗')
handlerClick() {
    console.log('click');
}
## 效果
触发handlerClick前会出现一个弹窗,点击确认后才会继续输出click。

三、Angular中装饰器的种类

在Angular中提供了以下19个内置的装饰器

装饰器类型 内置装饰器
类装饰器 5个 @Component、@NgModule、@Pipe、@Injectabl、@Directive
属性装饰器 6个 @Input、@Output、@ContentChild、@ContentChildren、@ViewChild、@ViewChildren
方法装饰器 2个 @HostListener、@HostBinding
参数装饰器 6个 @Attribute、@Inject、@Optional、@Self、@SkipSelf、@Host

四、学习内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容