Vue动态组件表格的实现代码

 更新时间:2022年10月16日 11:51:47   作者:生活在北极的企鹅  
这篇文章主要介绍了Vue动态组件表格的实现代码,包括框架结构组件,文中还给大家封装了几个组件,有按钮组件、图片组件、滑动开关,结合示例代码给大家详细讲解,需要的朋友可以参考下

Vue组件

数据源

//这里是HTML内容 这里通过下面的引入框架结构把数据源传到框架中 还有匹配项
<Mytable :configList="configList" :configData="configData"></Mytable>

// 引入结构组件
import myCard from "./components/card";

// 注册组件
components: { myCard },
     
 data() {
    return {
        // 这里定义数据列表
      configList: [
          // 这里是数据有源
          {
          text: "111",
          img: "/02.jpg",
          tap: "标签1",
          switch: true,
          button: "按钮1",
        },
      ],
       // 这里定义匹配项
      configData: [
      {
          table: "货币",
          porp: "text",
          name: "MyText",
        },
        {
          table: "图片",
          porp: "img",
          name: "Myimg",
        },
        {
          table: "标签",
          porp: "tap",
          name: "tag",
        },
        {
          table: "滑动开关",
          porp: "switch",
          name: "Btn",
          funName: (row) => {
            this.mySwitch(row);
          },
        },
        {
          table: "按钮",
          porp: "button",
          name: "Mybtn",
          // 如果组件中需要动态绑定事件 在这里设置
          funName: (row) => {
            this.myBtn(row);
          },
        },
      ]
    }
 ]

框架结构组件

<div>
    // 这里接受数据组件传递过来的数据
    <el-table :data="configList">
      <!-- 文字表格区间 -->
        // 这里进行循环渲染数据
      <el-table-column
        align="center"
        v-for="(item, index) in configData"
        :key="index"
        :label="item.table"
      >
        <!-- 组件 -->
         // 动态组件 这里可以进行标签 按钮 图片等 的别的组件进行循环渲染到表格中
        <template slot-scope="scope">
          <component
            :is="item.name"
            :value="scope.row"
            // 把每一项有点击事件进行传参
            @parentFun="fun(item.funName, scope.row)"
          ></component>
        </template>
      </el-table-column>
    </el-table>
  </div>

// 这里引用自己封装的动态组件
import Myimg from "@/components/toConfigure/img.vue";
import tag from "@/components/toConfigure/tag.vue";
import Btn from "@/components/toConfigure/switch.vue";
import MyText from "@/components/toConfigure/text.vue";
import Mybtn from "@/components/toConfigure/button.vue";

// 进行注册组件
components: {
    Myimg,
    tag,
    Btn,
    MyText,
    Mybtn,
  },
// 这里进行判断每个按钮时候有点击事件 没有为空  
methods: {
    fun(funName, row) {
      if (funName) {
        funName(row);
      }
    },
  },

// 这里接受传过来的数据
 props: {
    configData: {
      type: Array,
    },
    configList: {
      type: Array,
    },
  },

这里我自己封装了几个组件

按钮组件

<template>
    // 这里是按钮
  <el-button round @click="btn">{{ value.button }}</el-button>
</template>

<script>
export default {
// 接受组件传过来的值
  props: {
    value: {
      type: Object,
    },
  },
 // 这里进行绑定动态点击事件
  methods: {
    btn() {
       // 这里接受传参
      this.$emit("parentFun");
    },
  },
};
</script>

<style></style>

图片组件

<template>
  <div>
    <el-image
      style="width: 100px; height: 100px"
      :src="Myimg"
       // 使用时候把这条注释删除 这个属性是点击图片放大 不需要可以删除
      :preview-src-list="[Myimg]"
    ></el-image>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Object,
    },
  },
  computed: {
    Myimg() {
      if (this.value.img.length > 0) {
          // "@/assets/images" 这个是图片的根路径 加上 传递过来的数据中图片的名字
        return require("@/assets/images" + this.value.img);
      } else {
        return;
      }
    },
  },
};
</script>

<style></style>

滑动开关

<template>
  <div>
    <el-switch
      v-if="this.value.switch !== undefined"
      v-model="value.switch"
      active-color="#13ce66"
      inactive-color="#ff4949"
      @change="switchClick"
    ></el-switch>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Object,
    },
  },
  methods: {
    switchClick() {
      // 事件分发
      this.$emit("parentFun", this.value);
    },
  },
  mounted() {
    // console.log(this.value.button);
  },
};
</script>

<style></style>

tap组件

<template>
  <div>
    <el-tag v-if="value.tap.length > 0">{{ value.tap }}</el-tag>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Object,
    },
  },
};
</script>

<style></style>

text组件

<template>
  <div>
    {{ value.text }}
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Object,
    },
  },
};
</script>

<style></style>

到此这篇关于Vue动态组件 表格的文章就介绍到这了,更多相关Vue动态组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Vuejs的搜索匹配功能实现方法

    基于Vuejs的搜索匹配功能实现方法

    下面小编就为大家分享一篇基于Vuejs的搜索匹配功能实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue axios form-data格式传输数据和文件方式

    vue axios form-data格式传输数据和文件方式

    这篇文章主要介绍了vue axios form-data格式传输数据和文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 一文教会你搭建vite项目并配置路由和element-plus

    一文教会你搭建vite项目并配置路由和element-plus

    由于项目搭建过程实在繁琐,容易遗忘,每次新建项目还得百度一下怎么搭建,所以写下本文提醒自己,下面这篇文章主要给大家介绍了关于搭建vite项目并配置路由和element-plus的相关资料,需要的朋友可以参考下
    2022-07-07
  • Vue Router4 嵌套路由的示例代码

    Vue Router4 嵌套路由的示例代码

    在 Vue Router 4 中,嵌套路由是一种非常重要的功能,它允许我们创建更复杂的 UI 结构,同时保持路由的清晰和易于管理,这篇文章主要介绍了Vue Router4 嵌套路由,需要的朋友可以参考下
    2024-04-04
  • 关于Vue3过渡动画的踩坑记录

    关于Vue3过渡动画的踩坑记录

    在开发中我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验,下面这篇文章主要给大家介绍了关于Vue3过渡动画踩坑的相关资料,需要的朋友可以参考下
    2021-12-12
  • 一篇文章教你简单使用Vue的watch侦听器

    一篇文章教你简单使用Vue的watch侦听器

    这篇文章主要为大家介绍了Vue watch侦听器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Vue计算属性与监视属性详细分析使用

    Vue计算属性与监视属性详细分析使用

    computed是vue的配置选项,它的值是一个对象,其中可定义多个计算属性,每个计算属性就是一个函数,下面这篇文章主要给大家介绍了关于vue中计算属性computed的详细讲解,需要的朋友可以参考下
    2022-11-11
  • 如何使用Vuex+Vue.js构建单页应用

    如何使用Vuex+Vue.js构建单页应用

    这篇文章主要教大家如何使用Vuex+Vue.js构建单页应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 手把手教你创建vue3项目的最佳方式

    手把手教你创建vue3项目的最佳方式

    如今的Vue3已经势不可挡,当然搭建一个全新的Vue3项目也有了全新的方式,下面这篇文章主要给大家介绍了关于如何手把手教你创建vue3项目的最佳方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 彻底搞懂并解决vue-cli4中图片显示的问题实现

    彻底搞懂并解决vue-cli4中图片显示的问题实现

    这篇文章主要介绍了彻底搞懂并解决vue-cli4中图片显示的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论