js动态函数(方法)

 一、动态函数构成 

 MethodName-----函数名称

 Parameter-----入参

ToolClickFun(MethodName, Parameter) {
        this[`${MethodName}`] &&
          this[`${MethodName}`](Parameter);
      },

   二、使用动态函数

    mounted(){
        this.ToolClickFun("TestFun",123)
    },
    methods: {
        ToolClickFun(MethodName, Parameter) {
          this[`${MethodName}`] &&
          this[`${MethodName}`](Parameter);
       }, 
       TestFun(Data){
        console.log(data)
       }
    },

 三、结合Promise异步编程使用

创建promise

  let PromiseAllMethods = [];
        this.GetComponentLists.map((ele, index) => {
          let ItemPromise = new Promise((resolve, reject) => {
            this.ToolClickFun(
              ele.ComponentCptMethodName,
              {
                Time: this.GetSelectTimeData,
                No: 0,
              },
              resolve,
              reject
            );
          });
          PromiseAllMethods.push(ItemPromise);
        });
        Promise.all(PromiseAllMethods)
          .then((res) => {
            console.log(res);
            res.map((ele, index) => {
              let ItemComponent = this.GetComponentLists[index];
              ItemComponent.ComponentCptData = ele.data.Data;
              ItemComponent.ComponentLoadingStatus = false;
              ItemComponent.ComponentCptId = GenNonDuplicateID(8);
              ItemComponent.ComponentDate = this.GetSelectTimeData;
              this.$set(this.GetComponentLists, index, ItemComponent);
            });
          })
          .catch((e) => console.log(e));

全部代码: 

<template>
    <div class="DialogCptoutbox">
    </div>
  </template>
  <script>
  import { GenNonDuplicateID } from "@/utils/UniqueId";
  export default {
    name: "DialogCpt",
    components: {
        CptOne,
        CptTwo,
        CptThtree,
    },
    data() {
      return {
        GetComponentLists: [
          {
            ComponentName: "测试1",
            ComponentIndex: 0,
            ComponentDate: "",
            ComponentLoadingStatus: true,
            ComponentCpt: "CptOne",
            ComponentCptId: GenNonDuplicateID(8),
            ComponentCptData: {},
            ComponentCptIsShow: true,
            ComponentCptMethodName: "TestFunOne",
            ComponentCptParameter: {
              No: 0,
            },
          },
          {
            ComponentName: "测试2",
            ComponentIndex: 1,
            ComponentDate: "",
            ComponentLoadingStatus: true,
            ComponentCpt: "CptTwo",
            ComponentCptId: GenNonDuplicateID(8),
            ComponentCptData: {},
            ComponentCptIsShow: true,
            ComponentCptMethodName: "TestFunTwo",
            ComponentCptParameter: {
              No: 0,
            },
          },
          {
            ComponentName: "测试3",
            ComponentIndex: 2,
            ComponentDate: "",
            ComponentLoadingStatus: true,
            ComponentCpt: "CptThtree",
            ComponentCptId: GenNonDuplicateID(8),
            ComponentCptData: {},
            ComponentCptIsShow: true,
            ComponentCptMethodName: "TestFunThree",
            ComponentCptParameter: {
             No: 0,
            },
          },
         
        ],
      };
    },
    computed: {
      ...mapGetters({}),
    },
    mounted() {
        this.PromiseAllFun();
    },
    methods: {
      ToolClickFun(MethodName, Parameter, resolve, reject) {
        this[`${MethodName}`] &&
          this[`${MethodName}`](Parameter, resolve, reject);
      },
      PromiseAllFun() {
        /* 创建promise,在promise中调用axios then里使用resolve回调,catch里使用reject回调,GenNonDuplicateID(8) */
        let PromiseAllMethods = [];
        this.GetComponentLists.map((ele, index) => {
          let ItemPromise = new Promise((resolve, reject) => {
            this.ToolClickFun(
              ele.ComponentCptMethodName,
              {
                Time: this.GetSelectTimeData,
                No: 0,
              },
              resolve,
              reject
            );
          });
          PromiseAllMethods.push(ItemPromise);
        });
        Promise.all(PromiseAllMethods)
          .then((res) => {
            console.log(res);
            res.map((ele, index) => {
              let ItemComponent = this.GetComponentLists[index];
              ItemComponent.ComponentCptData = ele.data.Data;
              ItemComponent.ComponentLoadingStatus = false;
              ItemComponent.ComponentCptId = GenNonDuplicateID(8);
              ItemComponent.ComponentDate = this.GetSelectTimeData;
              this.$set(this.GetComponentLists, index, ItemComponent);
            });
          })
          .catch((e) => console.log(e));
      },
      TestFunOne(Parameter, resolve, reject) {
            this.$axios
                .post(AxiosUrl.UrlPath + "TestData1.json",
                    JSON.stringify(Parameter), {
                    headers: {
                        "Content-Type": "application/json;"
                    },
                }
                ).then((res) => {
                    console.log("res:", res);
                    resolve(res);
                })
                .catch((error) => {
                    reject(error);
                });
        },
        TestFunTwo(Parameter, resolve, reject) {
            this.$axios
                .post(AxiosUrl.UrlPath + "TestData2.json",
                    JSON.stringify(Parameter), {
                    headers: {
                        "Content-Type": "application/json;"
                    },
                }
                ).then((res) => {
                    console.log("res:", res);
                    resolve(res);
                })
                .catch((error) => {
                    reject(error);
                });
        },
        TestFunThree(Parameter, resolve, reject) {
            this.$axios
                .post(AxiosUrl.UrlPath + "TestData3.json",
                    JSON.stringify(Parameter), {
                    headers: {
                        "Content-Type": "application/json;"
                    },
                }
                ).then((res) => {
                    console.log("res:", res);
                    resolve(res);
                })
                .catch((error) => {
                    reject(error);
                });
        },
    },
  };
  </script>

 GenNonDuplicateID代码:

//生成指定长度的唯一ID
export function GenNonDuplicateID(randomLength) {
    return Number(
        Math.random()
        .toString()
        .substr(3, randomLength) + Date.now()
    ).toString(36);
}

 控制台输出:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

volodyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值