【element-ui】 el-table 表格动态合并相同数据单元格最全教程,可指定列+自定义合并条件,附完整代码

news2025/1/22 11:26:28

el-table合并单元格

1.固定合并

  • 官方挺提供的合并具体某行列的方法:el-table合并行或列
  • 通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。
    该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspancolspan的对象。
<template>
  <div>
    <el-table
      :data="tableData"
      :span-method="arraySpanMethod"
      border
      style="width: 100%">
      <el-table-column
        prop="id"
        label="ID"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名">
      </el-table-column>
      <el-table-column
        prop="amount1"
        sortable
        label="数值 1">
      </el-table-column>
      <el-table-column
        prop="amount2"
        sortable
        label="数值 2">
      </el-table-column>
      <el-table-column
        prop="amount3"
        sortable
        label="数值 3">
      </el-table-column>
    </el-table>

    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
      style="width: 100%; margin-top: 20px">
      <el-table-column
        prop="id"
        label="ID"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名">
      </el-table-column>
      <el-table-column
        prop="amount1"
        label="数值 1(元)">
      </el-table-column>
      <el-table-column
        prop="amount2"
        label="数值 2(元)">
      </el-table-column>
      <el-table-column
        prop="amount3"
        label="数值 3(元)">
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          id: '12987122',
          name: '王小虎',
          amount1: '234',
          amount2: '3.2',
          amount3: 10
        }, {
          id: '12987123',
          name: '王小虎',
          amount1: '165',
          amount2: '4.43',
          amount3: 12
        }, {
          id: '12987124',
          name: '王小虎',
          amount1: '324',
          amount2: '1.9',
          amount3: 9
        }, {
          id: '12987125',
          name: '王小虎',
          amount1: '621',
          amount2: '2.2',
          amount3: 17
        }, {
          id: '12987126',
          name: '王小虎',
          amount1: '539',
          amount2: '4.1',
          amount3: 15
        }]
      };
    },
    methods: {
      arraySpanMethod({ row, column, rowIndex, columnIndex }) {
        if (rowIndex % 2 === 0) {
          if (columnIndex === 0) {
            return [1, 2];
          } else if (columnIndex === 1) {
            return [0, 0];
          }
        }
      },

      objectSpanMethod({ row, column, rowIndex, columnIndex }) {
        if (columnIndex === 0) {
          if (rowIndex % 2 === 0) {
            return {
              rowspan: 2,
              colspan: 1
            };
          } else {
            return {
              rowspan: 0,
              colspan: 0
            };
          }
        }
      }
    }
  };
</script>

运行效果:
在这里插入图片描述
在这里插入图片描述

  • 缺点这种只适合写死的数据和固定的表格行列,无法动态判断单元格数据是否相等再合并;

2. 动态合并相同数据单元格(所有列)

  • 可以对所有相同数据的列,进行动态合并
  • 此方法适合需要合并所有的相同数据的单元格
<template>
  <div>
    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
   
      :header-cell-style="{ textAlign: 'center', backgroundColor: '#F5F7FA' }"
    >
      <el-table-column prop="School" label="学校" align="center">
      </el-table-column>
      <el-table-column prop="Grade" label="年级" align="center" />
      <el-table-column prop="Class" label="班级" align="center" />
      <el-table-column prop="Name" label="姓名" align="center" />
      <el-table-column prop="Chinese" label="语文" align="center" />
      <el-table-column prop="Math" label="数学" align="center" />
      <el-table-column prop="English" label="英语" align="center" />
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 存放所有的表头 一定要与tableData一致
      colFields: [
        "School",
        "Grade",
        "Class",
        "Name",
        "Chinese",
        "Math",
        "English",
      ],

      spanArr: [], //存储合并单元格的开始位置
      // 表格数据
      tableData: [
        // 一年级
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "1班",
          Name: "张三",
          Chinese: "90",
          Math: "100",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "2班",
          Name: "李四",
          Chinese: "90",
          Math: "85",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "3班",
          Name: "王五",
          Chinese: "79",
          Math: "100",
          English: "80",
        },
        // 二年级
        {
          School: "第一小学",
          Grade: "2年级",
          Class: "1班",
          Name: "赵六",
          Chinese: "95",
          Math: "100",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "2年级",
          Class: "2班",
          Name: "钱八",
          Chinese: "98",
          Math: "85",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "2年级",
          Class: "3班",
          Name: "陈九",
          Chinese: "79",
          Math: "100",
          English: "80",
        },
        // 三年级
        {
          School: "第一小学",
          Grade: "3年级",
          Class: "1班",
          Name: "黄十",
          Chinese: "91",
          Math: "88",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "3年级",
          Class: "2班",
          Name: "魏一",
          Chinese: "90",
          Math: "86",
          English: "87",
        },
        {
          School: "第一小学",
          Grade: "3年级",
          Class: "3班",
          Name: "杨二",
          Chinese: "79",
          Math: "99",
          English: "80",
        },
      ],
    };
  },
  methods: {
    /**
     * 分析每一列,找出相同的
     * @param data
     */
    getSpanArr() {
      for (let i = 0; i < this.tableData.length; i++) {
        let row = i;
        // let col = i % this.colCount;
        if (row === 0) {
          // i 表示行 j表示列
          for (let j = 0; j < this.colFields.length; j++) {
            this.spanArr[i * this.colFields.length + j] = {
              rowspan: 1,
              colspan: 1,
            };
          }
        } else {
          for (let j = 0; j < this.colFields.length; j++) {
            // 当前和上一次的一样
            // 1. 合并所有列的相同数据单元格
            if (
              this.tableData[row][this.colFields[j]] ===
              this.tableData[row - 1][this.colFields[j]]
            ) {
              let beforeItem =
                this.spanArr[(row - 1) * this.colFields.length + j];
              this.spanArr[row * this.colFields.length + j] = {
                rowspan: 1 + beforeItem.rowspan, // 合并几行
                colspan: 1, // 合并几列,我这里只是跨行合并,不跨列合并,所以用的1
              };
              beforeItem.rowspan = 0;
              beforeItem.colspan = 0;
            } else {
              // rowspan 和 colspan 都为1表格此单元格不合并
              this.spanArr[row * this.colFields.length + j] = {
                rowspan: 1,
                colspan: 1,
              };
            }
          }
        }
      }
      // 对数据进行倒序
      let stack = [];

      for (let i = 0; i < this.colFields.length; i++) {
        for (let j = 0; j < this.tableData.length; j++) {
          // console.log("i=" + i + " j=" + j);
          // i 表示列 j表示行
          if (j === 0) {
            if (this.spanArr[j * this.colFields.length + i].rowspan === 0) {
              stack.push(this.spanArr[j * this.colFields.length + i]);
            }
          } else {
            if (this.spanArr[j * this.colFields.length + i].rowspan === 0) {
              stack.push(this.spanArr[j * this.colFields.length + i]);
            } else {
              stack.push(this.spanArr[j * this.colFields.length + i]);
              while (stack.length > 0) {
                let pop = stack.pop();
                let len = stack.length;
                this.spanArr[(j - len) * this.colFields.length + i] = pop;
              }
            }
          }
        }
      }
      // console.log(this.spanArr);
    },

    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      // console.log(this.spanArr[rowIndex * this.colFields.length + columnIndex]);
      return this.spanArr[rowIndex * this.colFields.length + columnIndex];
    },
  },
  mounted() {
    this.getSpanArr();
  },
};
</script>

<style lang="scss" scoped></style>

效果:

在这里插入图片描述

我们可以看到,所有列,只要数据相同的单元格都被合并了,包括我不想合并的单元格,这时候就要指定合并的列
在这里插入图片描述

3. 动态合并相同数据单元格(指定列)

  • 只需要加个if判断即可指定要合并哪些列
// 这里只放了部分代码,除了加了个if,其他代码和上面的一样
 getSpanArr() {
      for (let i = 0; i < this.tableData.length; i++) {
        let row = i;
        // let col = i % this.colCount;
        if (row === 0) {
          // i 表示行 j表示列
          for (let j = 0; j < this.colFields.length; j++) {
            this.spanArr[i * this.colFields.length + j] = {
              rowspan: 1,
              colspan: 1,
            };
          }
        } else {
          for (let j = 0; j < this.colFields.length; j++) {
            // 当前和上一次的一样
            //  合并所有列的相同数据单元格
            if (
              this.colFields[j] == "School" ||
              this.colFields[j] == "Grade" ||
              this.colFields[j] == "Class"
            ) { // 指定合并哪些列
              if (
                this.tableData[row][this.colFields[j]] ===
                this.tableData[row - 1][this.colFields[j]]
              ) {
                let beforeItem =
                  this.spanArr[(row - 1) * this.colFields.length + j];
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1 + beforeItem.rowspan,
                  colspan: 1,
                };
                beforeItem.rowspan = 0;
                beforeItem.colspan = 0;
              } else {
                // rowspan 和 colspan 都为1表格此单元格不合并
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1,
                  colspan: 1,
                };
              }
            }
          }
        }
      }

效果:
这样就只合并了我们指定的那几列了

在这里插入图片描述

4. 动态合并相同数据单元格(指定列+合并条件)

有时候我们会遇到不想合并的单元格,比如下面这种情况:
在这里插入图片描述
按常理来说,不同小学的数据应该是不做合并才对,正确是这种:
在这里插入图片描述
这时候就需要加上一些自定义的合并条件了:

getSpanArr() {
      for (let i = 0; i < this.tableData.length; i++) {
        let row = i;
        // let col = i % this.colCount;
        if (row === 0) {
          // i 表示行 j表示列
          for (let j = 0; j < this.colFields.length; j++) {
            this.spanArr[i * this.colFields.length + j] = {
              rowspan: 1,
              colspan: 1,
            };
          }
        } else {
          for (let j = 0; j < this.colFields.length; j++) {
            // 当前和上一次的一样
            //  合并所有列的相同数据单元格
            if (
              this.colFields[j] == "School" ||
              this.colFields[j] == "Grade" ||
              this.colFields[j] == "Class"
            ) { // 指定合并哪些列
              
              if (
                this.tableData[row]["School"] !==
                  this.tableData[row - 1]["School"]
              ) { // 哪些不合并:School不一样的,不合并
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1,
                  colspan: 1,
                };
              } else if (
                this.tableData[row][this.colFields[j]] ===
                this.tableData[row - 1][this.colFields[j]]
              ) {
                let beforeItem =
                  this.spanArr[(row - 1) * this.colFields.length + j];
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1 + beforeItem.rowspan,// 合并几列
                  colspan: 1,// 合并几行
                };
                beforeItem.rowspan = 0;
                beforeItem.colspan = 0;
              } else {
                // rowspan 和 colspan 都为1表格此单元格不合并
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1,
                  colspan: 1,
                };
              }
            }

          
          }
        }
      }

      // console.log(this.spanArr);
    },

这时候再看,就是我们想要的效果了
在这里插入图片描述

完整代码

最后附完整代码:

<template>
  <div>
    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
      :header-cell-style="{ textAlign: 'center', backgroundColor: '#F5F7FA' }"
    >
      <el-table-column prop="School" label="学校" align="center">
      </el-table-column>
      <el-table-column prop="Grade" label="年级" align="center" />
      <el-table-column prop="Class" label="班级" align="center" />
      <el-table-column prop="Name" label="姓名" align="center" />
      <el-table-column prop="Chinese" label="语文" align="center" />
      <el-table-column prop="Math" label="数学" align="center" />
      <el-table-column prop="English" label="英语" align="center" />
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 存放所有的表头 一定要与tableData一致
      colFields: [
        "School",
        "Grade",
        "Class",
        "Name",
        "Chinese",
        "Math",
        "English",
      ],

      spanArr: [], //存储合并单元格的开始位置
      // 表格数据
      tableData: [
        // 一年级
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "1班",
          Name: "张三",
          Chinese: "90",
          Math: "100",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "1班",
          Name: "张伟",
          Chinese: "90",
          Math: "99",
          English: "89",
        },
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "2班",
          Name: "李四",
          Chinese: "90",
          Math: "85",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "1年级",
          Class: "3班",
          Name: "王五",
          Chinese: "79",
          Math: "100",
          English: "80",
        },
        // 二年级
        {
          School: "第一小学",
          Grade: "2年级",
          Class: "1班",
          Name: "赵六",
          Chinese: "95",
          Math: "100",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "2年级",
          Class: "2班",
          Name: "钱八",
          Chinese: "98",
          Math: "85",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "2年级",
          Class: "3班",
          Name: "陈九",
          Chinese: "79",
          Math: "100",
          English: "100",
        },
        // 三年级
        {
          School: "第一小学",
          Grade: "3年级",
          Class: "1班",
          Name: "黄十",
          Chinese: "91",
          Math: "88",
          English: "80",
        },
        {
          School: "第一小学",
          Grade: "3年级",
          Class: "2班",
          Name: "魏一",
          Chinese: "90",
          Math: "86",
          English: "87",
        },
        {
          School: "第一小学",
          Grade: "3年级",
          Class: "3班",
          Name: "杨二",
          Chinese: "79",
          Math: "99",
          English: "80",
        },
        // 第二小学
        {
          School: "第二小学",
          Grade: "3年级",
          Class: "3班",
          Name: "袁零",
          Chinese: "79",
          Math: "99",
          English: "80",
        },
      ],
    };
  },
  methods: {
    /**
     * 分析每一列,找出相同的
     * @param data
     */
    getSpanArr() {
      for (let i = 0; i < this.tableData.length; i++) {
        let row = i;
        // let col = i % this.colCount;
        if (row === 0) {
          // i 表示行 j表示列
          for (let j = 0; j < this.colFields.length; j++) {
            this.spanArr[i * this.colFields.length + j] = {
              rowspan: 1,
              colspan: 1,
            };
          }
        } else {
          for (let j = 0; j < this.colFields.length; j++) {
            // 当前和上一次的一样
            //  合并所有列的相同数据单元格
            if (
              this.colFields[j] == "School" ||
              this.colFields[j] == "Grade" ||
              this.colFields[j] == "Class"
            ) { // 指定合并哪些列
              
              if (
                this.tableData[row]["School"] !==
                  this.tableData[row - 1]["School"]
              ) { // 哪些不合并:School不一样的,不合并
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1,
                  colspan: 1,
                };
              } else if (
                this.tableData[row][this.colFields[j]] ===
                this.tableData[row - 1][this.colFields[j]]
              ) {
                let beforeItem =
                  this.spanArr[(row - 1) * this.colFields.length + j];
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1 + beforeItem.rowspan,// 合并几列
                  colspan: 1,// 合并几行
                };
                beforeItem.rowspan = 0;
                beforeItem.colspan = 0;
              } else {
                // rowspan 和 colspan 都为1表格此单元格不合并
                this.spanArr[row * this.colFields.length + j] = {
                  rowspan: 1,
                  colspan: 1,
                };
              }
            }

          
          }
        }
      }
      // 对数据进行倒序
      let stack = [];

      for (let i = 0; i < this.colFields.length; i++) {
        for (let j = 0; j < this.tableData.length; j++) {
          // console.log("i=" + i + " j=" + j);
          // i 表示列 j表示行
          if (j === 0) {
            if (this.spanArr[j * this.colFields.length + i].rowspan === 0) {
              stack.push(this.spanArr[j * this.colFields.length + i]);
            }
          } else {
            if (this.spanArr[j * this.colFields.length + i].rowspan === 0) {
              stack.push(this.spanArr[j * this.colFields.length + i]);
            } else {
              stack.push(this.spanArr[j * this.colFields.length + i]);
              while (stack.length > 0) {
                let pop = stack.pop();
                let len = stack.length;
                this.spanArr[(j - len) * this.colFields.length + i] = pop;
              }
            }
          }
        }
      }
      // console.log(this.spanArr);
    },

    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      // console.log(this.spanArr[rowIndex * this.colFields.length + columnIndex]);
      return this.spanArr[rowIndex * this.colFields.length + columnIndex];
    },
  },
  mounted() {
    this.getSpanArr();
  },
};
</script>

<style lang="scss" scoped></style>

参考:https://blog.csdn.net/u010735120/article/details/122184493

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS中的伪类和伪元素(详细)

这篇想要跟大家分享的是css中的伪类和伪元素&#xff0c;有任何问题可以私聊我或者评论哦&#xff01; 首先&#xff0c;我们先来想一下 一、引入伪类跟伪元素的原因&#xff1f; 伪类和伪元素的引入是因为在文档树里有些信息无法被充分描述 比如CSS没有“段落的第一行”、…

[error] Error: Fail to open IDE 问题解决

问题描述&#xff1a;接手前辈的微信小程序项目&#xff08;uni-app搭建&#xff09;&#xff0c;使用HBuilder编译器&#xff0c;&#xff0c;控制台报 [error] Error: Fail to open IDE 错误原因一&#xff1a;微信小程序AppID错误解决方法&#xff1a;如图点击项目目录 mani…

wangeditor5在vue3中的全使用过程(图片上传、附件上传、工具栏配置、编辑器配置)

1、参考官方的wangeditor5-for-vue3的开发手册 官方文档地址&#xff1a;https://clinfc.github.io/wangeditor5-for-vue3/guide/ 说明为说明要编写这编博客文章&#xff1f; 官方文档的使用手册对于新手来说比较的难看懂&#xff0c;写的也不够详细&#xff0c;源码的封装比较…

vue3+vite项目配置ESlint、pritter插件

前言 入行前端工作将近两年多时间了&#xff08;如果算上实习&#xff09;&#xff0c;从一开始vue2入门&#xff0c;到现在vue3前端变化是真的快&#xff0c;刚了解webpack搭建项目流程&#xff0c;vite又横空出世&#xff0c;不得不说前端变化真的太快了&#xff0c;所以只有…

【JavaScript】DOM和事件简介和文档加载流程以及DOM查询(上)案例(附源码)

&#x1f41a;作者简介&#xff1a;苏凉&#xff08;专注于网络爬虫&#xff0c;数据分析&#xff0c;正在学习前端的路上&#xff09; &#x1f433;博客主页&#xff1a;苏凉.py的博客 &#x1f310;系列总专栏&#xff1a;web前端基础教程 &#x1f451;名言警句&#xff1a…

自己的智能AI聊天机器人,可自定义头像,免费html源码分享,粘贴即用!

1.展示效果效果预览图&#xff1a;新增小功能&#xff1a;① 在原有的基础上加入了本地实时存档的功能&#xff0c;按照下面的步骤便可以随时在本地查看以往和智能AI所有的聊天记录哦&#xff01;再也不用担心关闭网页后先前的聊天内容全部消失啦&#xff01;PS&#xff1a;最新…

解决宝塔 Nginx 跨域问题Access-Control-Allow-Origin

何为跨域&#xff1f; 1、资源跳转&#xff1a; A链接、重定向、表单提交 2.资源嵌入&#xff1a; <link>、<script>、<img>、<frame>等dom标签&#xff0c;还有样式中background:url()、font-face()等文件外链 3.脚本请求&#xff1a; js发起的ajax请…

商城系统需求分析

文章目录一、引言1.1项目背景1.2 前期工作二、技术概述三、功能需求3.1 功能块划分3.2 功能块描述3.2.1 面向用户部分功能&#xff1a;3.2.2 后台管理部分功能&#xff1a;四、性能需求4.1 数据精确度4.2 适应性五、系统流程图5.1 顾客与管理员流程图如下5.2 订单处理流程说明六…

VUE动态切换皮肤 VUE动态切换背景图片 操作 / VUE 主题切换

上正文 使用&#xff1a;root &#xff0c;var&#xff08;&#xff09;函数实现 1. 创建皮肤或主题 css目录 一个公共主题文件 theme.css&#xff0c;一个main.js引入文件theme-all.css&#xff0c;一个单独的 主题样式文件 theme-12.css 2. 定义css文件中所要切换的主题的…

vue(绑定style属性)

以对象方式绑定style属性 <div id"app"> <!-- 在行内属性中书写样式 --> <div style"color:royalblue ; font-size: 48px;">黄绥睿真帅个鬼</div> <!-- 把行内属性改造成对象&#xff0c;以对象方式绑定style属性 外部增加{}&a…

【进阶】TS 中的 类型断言 和 泛型

类型断言 作用 : 手动指定值的具体类型 ( 缩写值的范围 ) 应用场景 1 获取 DOM 元素的时候指定具体元素 示例 : const box document.getElementById(img) console.log(box.src) // ts报错错误内容 : 解析 &#xff1a; 上述语法在 js 中可以直接使用, 但是 TS 中就不行…

vue 动态样式绑定 class/style

简介&#xff1a; 字符串写法&#xff1a;类名不确定&#xff0c;要动态获取 对象写法&#xff1a;要绑定多个样式&#xff0c;个数确定&#xff0c;名字确定&#xff0c;但不确定用不用。 数组写法&#xff1a;要绑定多个样式&#xff0c;个数不确定&#xff0c;名字不确定。…

HTML基础 - HTML表格

HTML基础 - HTML表格 1.无表头的表格 <table> <tr> <td> <table>标签代表的是表 <tr>标签代表的是行 <td>标签代表的是列 在html页面中的表格来着&#xff0c;就和excl的表格不一样喽&#xff0c;咱自己有自己的规则&#xff1a; 这就是…

这一次,彻底搞懂箭头函数

一、箭头函数的特点 1. 相比普通函数&#xff0c;箭头函数有更加简洁的语法。 普通函数 function add(num) {return num 10 }箭头函数 const add num > num 10;2. 箭头函数不绑定this&#xff0c;会捕获其所在上下文的this&#xff0c;作为自己的this。 这句话需要注意的…

若依(ruoyi)字典管理插件实现思路探究

一个UI表单的构成&#xff0c;避免不了下拉框&#xff0c;多选框等标签&#xff0c;在开发这些标签时&#xff0c;通常会请求后台接口获取字典值进行动态渲染。定制化开发虽然实现简单&#xff0c;但会产生大量重复工作&#xff0c;解决这类问题的思路有哪些&#xff1f;文章对…

chrome插件开发时跨域问题解决方案

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

Vue在HTML中如何使用

&#x1f440;Vue是什么 一套用于构建用户界面的渐进式JavaScript框架。 构建用户界面&#xff1a;数据变成界面渐进式&#xff1a;Vue可以自底向上逐层的应用&#x1f440;Vue如何使用 一、引入vue.js <script src"./js/vue.js"></script> 二、准备一个…

HBuilderX uni-app简单实现静态登录页面(实例)

本章用到......uni-app页面跳转uni.navigateTo方法、uni.navigateBack方法。uni-app简单实现邮箱验证码发送点击后读秒样式。登录账号、密码正则表达式验证等 适合刚入门的小伙伴&#xff0c;大佬就没必要看了 静态页面&#xff01;静态页面&#xff01;没有绑定后端数据接口…

拿来即用的前端登录页面(简洁清爽版)

1、使用bootstrap实现 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title><link rel"stylesheet" href"/bootstrap-3.3.7-dist/css/bootstrap.m…

vue项目根据不同环境动态配置接口请求ip及全局变量(vue环境变量配置)

在项目的开发过程中&#xff0c;我们常常会遇到根据不同的环境需要切换不同的ip的问题&#xff0c;例如在项目部署到测试服时需要将接口请求ip替换成测试服的ip,部署到正式服时又需要将接口请求ip替换成正式服对应的ip,有些公司还有预发环境等&#xff0c;这样在每次部署不同环…