【发布时间】:2019-08-22 16:49:23
【问题描述】:
假设我们有很多方法要在原始方法中添加确认对话框。因此我们决定构建一个自定义装饰器。
@Component({...})
export class HeroComponent {
constructor(private dialog: MatDialog) {}
@confirmByDialog(this.dialog)
deleteHero() { ... }
}
export function confirmByDialog (dialog: MatDialog): MethodDecorator {
return (target: Function, key: string, descriptor: any) => {
const originalMethod = descriptor.value;
descriptor.value = (...args: any[]) => {
const dialogRef = dialog.open(ConfirmationDialogComponent);
return dialogRef
.afterClosed()
.subscribe((confirmed: boolean) => {
if (confirmed) {
originalMethod();
}
});
};
return descriptor;
};
}
但这种方法不起作用,因为
无法读取未定义 (hero.component.ts) 的属性“对话框”
如何将附加参数传递给装饰器?我已经考虑将dialog 传递给原始函数本身以通过args 访问它,但这对我来说听起来像是一个非常肮脏的黑客攻击?
提前致谢!
【问题讨论】:
标签: angular typescript decorator angular-decorator