重新启程之Vue——点击按钮,弹出弹窗组件

目录

一、点击按钮,弹出弹窗组件

二、用v-for渲染一堆按钮,给每个按钮绑定不同的事件,其中一个按钮,点击则显示弹窗组件


 

一、点击按钮,弹出弹窗组件

按钮:<el-button>

弹窗:<log-dialog>

<el-button
          type="primary"
          size="small"
          @click="LogDialogVisible = true"   
          plain
          >查看日志</el-button>

<log-dialog :id="id" :visible.sync="LogDialogVisible" title="下载日志" />


<!-- @click="LogDialogVisible = true"  : 点击,让弹窗可见(visible)-->
<script>
import LogDialog from "./child-comps/DeviceControlLogDialog.vue";  //导入弹窗组件

export default {
  name: "xxxxxxx",
  data() {
      return {
        LogDialogVisible: false,    //一开始弹窗设为false,则不可见
      }  
  },
  components: { LogDialog }, //注册组件
}
</script>

二、用v-for渲染一堆按钮,给每个按钮绑定不同的事件,其中一个按钮,点击则显示弹窗组件

<template #default="{ row }">
              <el-button
                v-for="button in row.config.button"
                :key="button.id"
                size="mini"
                :type="button.type ? button.type : 'warning'"
                class="command-button"
                :plain="button.plain != undefined ? button.plain : true"
                :loading="button.loading"
                :disabled="button.disable"
                @click="onSelectFunc(row, button)"
              >
                {{ button.btnText }}
              </el-button>
            </template>


<!-- @click="onSelectFunc(row, button)"  : 点击,根据按钮的key去执行各自的事件处理函数-->

<log-dialog :id="id" :visible.sync="LogDialogVisible" title="下载日志" />
<script>
import LogDialog from "./child-comps/DeviceControlLogDialog.vue";  //导入弹窗组件

export default {
  name: "xxxxxxx",
  data() {
      return {
        //一开始弹窗设为false,则不可见
        LogDialogVisible: false,   
        // 回调函数映射表
        funcMap: {
        downLoadLog:this.downLoadLog, //"下载日志"
        },
      }  
  },
  components: { LogDialog }, //注册组件
  methods: {
    tanchuang (){
      this.LogDialogVisible = !this.LogDialogVisible;   //=======>重要,写成LogDialogVisible =true是不行的。
      // alert("我是弹窗");
    },
    async downLoadLog(args) {
      this.tanchuang();
    },



    /**
     * @this funcMap 函数和关键字的映射表
     * @funcKey 按钮点击后执行的方法关键字,根据此关键字进行映射,来获取对应方法
     * @row 获取row.command
     * @button 对应button的数据,包括配置和args
     */
    onSelectFunc(row, button) {
      // 判断执行函数的key
      const funcKey = button.funcKey;
      if (!button.args) button.args = {};
      button.args.command = row.command;
      
      //新增其他变量
      if (row.params_type) {
        for (const prop in row) {
          if (!row[prop] || prop == "command" || prop == "config" || prop == "params_type") {
            continue;
          }
          button.args[prop] = row[prop];
        }
      }
      if (funcKey || this.funcMap[funcKey]) {
        this.buttonLoading(this.funcMap[funcKey], button, row);
        return button.funcKey;
      }
      
      // 默认执行的函数
      this.buttonLoading(this.funcMap["default"], button, row);
      return "default";
      
    },





  }
}
</script>

有点乱,从代码中截取了一些相关片段。

以此作为记录。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值