- 装饰器/注解 就是一个函数
- 但它是一个返回函数的函数
- 它是TypeScript 的一个特性,而非Angular 的特性
@Emoji() result = 'Hello'; export function Emoji() { return (target: object, key: string) => { let val = target[key]; const getter = () => { return val; }; const setter = (value: string) => { val = `/笑哭 ${value} /笑哭`; }; Object.defineProperty(target, key, { get: getter, set: setter, enumerable: true, configurable: true }); }; }
<p (click)="handleClick()">你好</p> @Confirmable('确定执行当前操作?') handleClick() { console.log('点击已执行'); } export function Confirmable(message: string) { return (target: object, key: string, descriptor: PropertyDescriptor) => { const original = descriptor.value; descriptor.value = function (...args: any) { const allow = window.confirm(message); if (allow) { const result = original.apply(this, args); return result; } return null; }; return descriptor; } }