function.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import TriggerData, {Trigger} from "@/types/data";
  2. interface FunctionUseFunction {
  3. (this:Vue, item:TriggerData, index:number): any
  4. }
  5. interface FunctionUseAsyncFunction {
  6. (this:Vue, item:TriggerData, index:number): Promise<FunctionUseFunction>
  7. }
  8. type FunctionUseParams = string | FunctionUseFunction | FunctionUseAsyncFunction;
  9. export default class FunctionTrigger extends Trigger {
  10. constructor(private triggerFunction:FunctionUseParams){
  11. super();
  12. }
  13. trigger(item: TriggerData, index: number, target: Vue): void {
  14. if (typeof this.triggerFunction === 'string') {
  15. // @ts-ignore
  16. return target[this.triggerFunction](item,index);
  17. }
  18. // 执行
  19. let params:any = this.triggerTarget(this.triggerFunction,item,index,target);
  20. // 如果为异步触发
  21. if (params instanceof Promise) {
  22. params.then((useFunction:FunctionUseFunction)=> this.triggerTarget(useFunction,item,index,target)).catch((useFunction:FunctionUseFunction)=> this.triggerTarget(useFunction,item,index,target))
  23. }
  24. }
  25. triggerTarget(trigger:FunctionUseFunction, item: TriggerData, index: number, target: Vue):any{
  26. if (typeof trigger === 'function') {
  27. return trigger.call(target,item,index);
  28. }
  29. }
  30. }