Я попытался выяснить это для извлечения функции с помощью декоратора, но когда я определил метадескриптор и получил снова, я ничего не получил, это то, что я сделал до сих пор:
actionListener function:
export const PROPERTY_META_METHOD = Symbol('meta:action');
export const CONTAINER_CLASS = [];
export function ActionListner(key: string) {
return function(target, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
let topicFns: Array<() => void> = Reflect.getMetadata(PROPERTY_META_METHOD, target);
if(!topicFns) {
Reflect.defineMetadata(PROPERTY_META_METHOD, topicFns = [], target);
}
function isActionListener(obj: any): obj is IActionListner {
return (<IActionListner> obj).actionValue || (<IActionListner> obj).bottonKey !== undefined ;
}
const method = descriptor.value;
const config = { class: target}
CONTAINER_CLASS.push(config);
descriptor.value = function(...args:any[]) {
for(let i: number = 0; i < args.length; ++i) {
if(isActionListener(args[i]) && (<IActionListner>args[i]).bottonKey === key) {
return method.apply(this, args)
}
}
return;
}
return descriptor;
};
}
добавление декоратора в функцию
@ActionListner('btnPencarianBelanja')
actionPencarian(action: IActionListner) {
console.log(action);
return null;
}
при попытке получить метаданные
CONTAINER_CLASS.forEach(clazz => {
const target = clazz.class;
let topicFns: Array<() => void> = Reflect.getMetadata('design:type', target, target)
console.log(topicFns);
if(topicFns && topicFns.length > 0) {
for(const meta of topicFns) {
const action: IActionListner = {
actionValue: this.selectedNode,
bottonKey: e.key
}
const args: any[] = [action]
Reflect.apply(meta, void 0, args);
}
}
});
Пожалуйста, помогите мне