Vue前端的一些表格组件的思考

news2025/1/17 23:08:19

当我们需要在前端中展示一些表格内容时,我们往往使用Vuetable来实现

1. 原生态实现

<template>
  <div>
    <table class="no-gap-table">
        <thead>
          <tr>
            <th class="styled-header" colspan="4">Column1</th>
            <th class="styled-header" colspan="3">column2</th>
            <th class="styled-header" colspan="2">Column3</th>
            <th class="styled-header" rowspan="3">Column4</th>
            <th class="styled-header" colspan="2">Column5</th>
          </tr>
          <tr>
            <th class="styled-header" colspan="2">SubColumn1 aaaa</th>
            <th class="styled-header" colspan="2">SubColumn1 bbbb</th>
            <th class="styled-header" colspan="2">SubColumn2 cccc</th>
            <th class="styled-header" colspan="1">SubColumn2 dddd</th>
            <th class="styled-header" colspan="1">SubColumn3 eeee</th>
            <th class="styled-header" colspan="1">SubColumn3 ffff</th>
            <th class="styled-header" colspan="1" rowspan="2">SubColumn5 ffff</th>
            <th class="styled-header" colspan="1" rowspan="2">SubColumn5 ffff</th>
          </tr>
          <tr>
            <th class="styled-header">ChildColumn aaaa</th>
            <th class="styled-header">ChildColumn bbbb</th>
            <th class="styled-header">ChildColumn cccc</th>
            <th class="styled-header">ChildColumn dddd</th>
            <th class="styled-header">ChildColumn eeee</th>
            <th class="styled-header">ChildColumn ffff</th>
            <th class="styled-header">ChildColumn dddd</th>
            <th class="styled-header">ChildColumn eeee</th>
            <th class="styled-header">ChildColumn ffff</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="(item) in items" :key="item.id">
            <td>{{ item.column1 }}</td>
            <td>{{ item.column2_1 }}</td>
            <td>{{ item.column2_2 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
          </tr>
        </tbody>
      </table>
  </div>
</template>

  

<script>
export default {
  name:"MyTable",
  props:['columnTreeInfo','tableDataSource'],
  data() {
    return {
      data:{
        items: [
          { id: 1, column1: 'Item 1', column2_1: 'Subitem 1', column2_2: 'Subitem 2', column3: 'Value 1' },
          { id: 2, column1: 'Item 2', column2_1: 'Subitem 1', column2_2: 'Subitem 2', column3: 'Value 2' },
        ]
      }
    };
  },
  methods:{
  },
  created(){
    this.$refs['columnInfo'].appendChild(this.template)
  },
  beforeCreate(){
    console.log(this);
  }
};
</script>

<style scoped>
.no-gap-table {
  border-collapse: collapse; /* Merge adjacent cell borders */
  width: 100%; /* Set the table width to 100% */
}
.no-gap-table th,
.no-gap-table td {
  border: 1px solid #000; /* Add a border around each cell */
  padding: 0; /* Remove cell padding */
  margin: 0; /* Remove cell margin */
}
.styled-header {
  border:  solid #000; /* Add a 2px solid black underline */
  padding: 2 px; /* Add some padding for better visual appearance */
}
</style>

当前实现如下:

在这里插入图片描述

2. 动态递归封装组件

2.1. 层级递归实现

<template>
    <div>
      <table class="no-gap-table">
        <MyTableChildRow :columns="headerColumns" />
        <tbody>
            <tr v-for="(item) in items" :key="item.id">
              <td>{{ item.column1 }}</td>
              <td>{{ item.column2_1 }}</td>
              <td>{{ item.column2_2 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
              <td>{{ item.column3 }}</td>
            </tr>
        </tbody>
      </table>
    </div>
  </template>
  <script>
  import MyTableChildRow from './MyTableChildRow.vue';
  export default {
    components: {
      MyTableChildRow
    },
    data() {
      return {
        headerColumns: [
          {
            key:1,
            children:[
              {
                label:"Column1",
                colspan:1,
              },
              {
                label:"Column2",
                colspan:1,
              },
              {
                label:"Column3",
                colspan:1,
              },
              {
                label:"Column4",
                colspan:2,
              }
            ]
          },
          {
            key:2,
            children:[
              {
                label:"Column1",
                colspan:1,
              },
              {
                label:"Column2",
                colspan:1,
              },
              {
                label:"Column3",
                colspan:1,
              },
              {
                label:"Column4",
                colspan:1,
              },
              {
                label:"Column5",
                colspan:1,
              }
            ]
          },
          {
            key:3,
            children:[
              {
                label:"Column1",
                colspan:1,
              },
              {
                label:"Column2",
                colspan:1,
              },
              {
                label:"Column3",
                colspan:1,
              },
              {
                label:"Column4",
                colspan:1,
              },
              {
                label:"Column5",
                colspan:1,
              }
            ]
          },
          {
            key:4,
            children:[
              {
                label:"Column1",
                colspan:1,
              },
              {
                label:"Column2",
                colspan:1,
              },
              {
                label:"Column3",
                colspan:1,
              },
              {
                label:"Column4",
                colspan:1,
              },
              {
                label:"Column5",
                colspan:1,
              }
            ]
          },
        ],
        items: [
          { id: 1, column1: 'Item 1', column2_1: 'Subitem 1', column2_2: 'Subitem 2', column3: 'Value 1' },
          { id: 2, column1: 'Item 2', column2_1: 'Subitem 1', column2_2: 'Subitem 2', column3: 'Value 2' },
        ]
      };
    }
  };
  </script>
  <style scoped>
  .no-gap-table {
    border-collapse: collapse; /* Merge adjacent cell borders */
    width: 100%; /* Set the table width to 100% */
  }
  .no-gap-table th,
  .no-gap-table td {
    border: 1px solid #000; /* Add a border around each cell */
    padding: 0; /* Remove cell padding */
    margin: 0; /* Remove cell margin */
  }
  </style>
<template>
  <div>
    <table class="no-gap-table">
      <thead>
        <MyTableChildCol :columns="headerColumns" />
      </thead>
      <tbody>
          <tr v-for="(item) in items" :key="item.id">
            <td>{{ item.column1 }}</td>
            <td>{{ item.column2_1 }}</td>
            <td>{{ item.column2_2 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
            <td>{{ item.column3 }}</td>
          </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
import MyTableChildCol from './MyTableChildCol.vue';
  
export default {
  components: {
    MyTableChildCol
  },
  data() {
    return {
      headerColumns: [
        { key: 'header1', label: 'Header 1', colspan: 2 },
        {
          key: 'header2', label: 'Header 2', rowspan: 2,
          children: [
            { key: 'subheader2_1', label: 'Subheader 2.1' },
            { key: 'subheader2_2', label: 'Subheader 2.2', colspan: 2,
              children: [
                { key: 'subsubheader2_2_1', label: 'Sub-subheader 2.2.1' },
                { key: 'subsubheader2_2_2', label: 'Sub-subheader 2.2.2' }
              ]
            }
          ]
        },
        { key: 'header3', label: 'Header 3', colspan: 2 }
      ],
      items: [
        { id: 1, column1: 'Item 1', column2_1: 'Subitem 1', column2_2: 'Subitem 2', column3: 'Value 1' },
        { id: 2, column1: 'Item 2', column2_1: 'Subitem 1', column2_2: 'Subitem 2', column3: 'Value 2' },
      ]
    };
  }
};
</script>

<style scoped>
.no-gap-table {
  border-collapse: collapse; /* Merge adjacent cell borders */
  width: 100%; /* Set the table width to 100% */
}
.no-gap-table th,
.no-gap-table td {
  border: 1px solid #000; /* Add a border around each cell */
  padding: 0; /* Remove cell padding */
  margin: 0; /* Remove cell margin */
}
</style>

在这里插入图片描述

3. 开源好用的一些Vue table 组件汇总

3.1. Vue easytable

Vue Easytable 是一个基于Vue2的表格组件,支持单元格合并、单元格编辑、多表头固定、多列固定、列拖动、排序、自定义列、分页、单元格编辑、多选、条件过滤、footer 汇总等功能。

3.1.1. 功能

  • 自适应,可以随着浏览器窗口改变自动适应
  • 固定列,表头固定
  • 支持列宽拖动
  • 支持单个字段排序和多个字段排序
  • 自定义列、自定义单元格样式
  • loading效果、自定义loading 等
  • 自带分页组件
  • 单元格编辑
  • 支持单元格合并 (colSpan and rowSpan)
  • 支持 checkbox 多选功能
  • footer 汇总功能
  • 添加条件过滤功能
  1. 安装 Vue EasyTable:

首先,在你的 Vue 项目中安装 Vue EasyTable:

npm install vue-easytable --save

3.1.2. git地址和官方地址

  • git地址:Happy-Coding-Clans/vue-easytable: A powerful data table based on vuejs. You can use it as data grid、Microsoft Excel or Google sheets. It supports virtual scroll、cell edit etc. (github.com)
  • 官网地址:Table Component/ Data Grid / Data Table.Support Virtual Scroll,Column Fixed,Header Fixed,Header Grouping,Filter,Sort,Cell Ellipsis,Row Expand,Row Checkbox (gitee.io)

3.1.3. 内容介绍

  • 官网首页效果图

在这里插入图片描述

  • 复合表头效果以及代码

在这里插入图片描述

<template>
    <ve-table border-y :columns="columns" :table-data="tableData" />
</template>

<script>
    export default {
        data() {
            return {
                columns: [
                    { 
	                    field: "col1", 
	                    key: "a", 
	                    title: "col1", 
	                    width: "10%" 
	                },
                    {
                        title: "col2-col3",
                        children: [
                            {
                                field: "col2",
                                key: "b",
                                title: "col2",
                                width: 100,
                            },
                            {
                                field: "col3",
                                key: "c",
                                title: "col3",
                                width: 110,
                            },
                        ],
                    },
                    {
                        title: "col4-col5-col6",
                        children: [
                            {
                                title: "col4-col5",
                                children: [
                                    {
                                        field: "col4",
                                        key: "d",
                                        title: "col4",
                                        width: 130,
                                    },
                                    {
                                        field: "col5",
                                        key: "e",
                                        title: "col5",
                                        width: 140,
                                    },
                                ],
                            },
                            {
                                title: "col6",
                                field: "col6",
                                key: "f",
                                width: 140,
                            },
                        ],
                    },
                    { 
	                    field: "col7", 
	                    key: "g", 
	                    title: "col7", 
	                    width: 150 
	                },
                    { 
	                    field: "col8", 
	                    key: "h", 
	                    title: "col8", 
	                    width: 160 
	                },
                ],
                tableData: [],
            };
        },
        methods: {
            initTableData() {
                let data = [];
                for (let i = 0; i < 6; i++) {
                    data.push({
                        rowKey: i,
                        col1: i,
                        col2: i,
                        col3: i,
                        col4: i,
                        col5: i,
                        col6: i,
                        col7: i,
                        col8: i,
                    });
                }
                this.tableData = data;
            },
        },
        created() {
            this.initTableData();
        },
    };
</script>
  • 单元格编辑
1、通过 `editOption`属性配置单元格编辑功能  
2、通过 `columns` 对象设置`edit=true`允许编辑的列

在这里插入图片描述

<template>
    <div>
        <button class="button-demo" @click="startEditingCell(0,'name')">编辑单元格0-0</button>
        <button class="button-demo" @click="startEditingCell(2,'hobby','')">
            编辑并清空单元格2-2
        </button>
        <br />
        <br />
        <ve-table
            ref="tableRef"
            rowKeyFieldName="rowKey"
            :max-height="300"
            :fixed-header="true"
            :columns="columns"
            :table-data="tableData"
            :editOption="editOption"
            :row-style-option="rowStyleOption"
            border-y
        />
    </div>
</template>

<script>
    export default {
        data() {
            return {
                rowStyleOption: {
                    clickHighlight: false,
                    hoverHighlight: false,
                },
                // edit option 可控单元格编辑
                editOption: {
                    // cell value change
                    cellValueChange: ({ row, column }) => {
                        console.log("cellValueChange row::", row);
                        console.log("cellValueChange column::", column);
                    },
                },
                columns: [
                    {
                        field: "",
                        key: "a",
                        title: "",
                        width: 50,
                        align: "center",
                        operationColumn: true,
                        renderBodyCell: ({ row, column, rowIndex }, h) => {
                            return ++rowIndex;
                        },
                    },
                    {
                        field: "name",
                        key: "name",
                        title: "Name",
                        align: "left",
                        width: "15%",
                        edit: true,
                    },
                    {
                        field: "date",
                        key: "date",
                        title: "Date",
                        align: "left",
                        width: "15%",
                        edit: true,
                    },
                    {
                        field: "hobby",
                        key: "hobby",
                        title: "Hobby",
                        align: "left",
                        width: "30%",
                        edit: true,
                    },
                    {
                        field: "address",
                        key: "address",
                        title: "Address",
                        align: "left",
                        width: "40%",
                        edit: true,
                    },
                ],
                // table data
                tableData: [
                    {
                        name: "John",
                        date: "1900-05-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Shanghai",
                        rowKey: 0,
                    },
                    {
                        name: "Dickerson",
                        date: "1910-06-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Beijing",
                        rowKey: 1,
                    },
                    {
                        name: "Larsen",
                        date: "2000-07-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Chongqing",
                        rowKey: 2,
                    },
                    {
                        name: "Geneva",
                        date: "2010-08-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Xiamen",
                        rowKey: 3,
                    },
                    {
                        name: "Jami",
                        date: "2020-09-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Shenzhen",
                        rowKey: 4,
                    },
                ],
            };
        },
        methods: {
            // start editing cell
            startEditingCell(rowKey, colKey, defaultValue) {
                this.$refs["tableRef"].startEditingCell({ rowKey, colKey, defaultValue });
            },
        },
    };
</script>
  • 自定义事件

在这里插入图片描述

<template>
    <div>
        打开F12 查看 console 信息
        <ve-table
            :columns="columns"
            :table-data="tableData"
            :event-custom-option="eventCustomOption"
        />
    </div>
</template>

<script>
    export default {
        data() {
            return {
                eventCustomOption: {
                    bodyRowEvents: ({ row, rowIndex }) => {
                        return {
                            click: (event) => {
                                console.log("click::", row, rowIndex, event);
                            },
                            dblclick: (event) => {
                                console.log("dblclick::", row, rowIndex, event);
                            },
                            contextmenu: (event) => {
                                console.log("contextmenu::", row, rowIndex, event);
                            },
                            mouseenter: (event) => {
                                console.log("mouseenter::", row, rowIndex, event);
                            },
                            mouseleave: (event) => {
                                console.log("mouseleave::", row, rowIndex, event);
                            },
                        };
                    },
                },
                columns: [
                    {
                        field: "",
                        key: "a",
                        title: "",
                        width: 50,
                        align: "center",
                        renderBodyCell: ({ row, column, rowIndex }, h) => {
                            return ++rowIndex;
                        },
                    },
                    {
                        field: "name",
                        key: "b",
                        title: "Name",
                        width: 200,
                        align: "left",
                    },
                    {
                        field: "hobby",
                        key: "c",
                        title: "Hobby",
                        width: 300,
                        align: "left",
                    },
                    {
                        field: "address",
                        key: "d",
                        title: "Address",
                        width: "",
                        align: "left",
                    },
                ],
                tableData: [
                    {
                        rowKey: 1001,
                        name: "John",
                        date: "1900-05-20",
                        hobby: "coding",
                        address: "No.1 Century Avenue, Shanghai",
                    },
                    {
                        rowKey: 1002,
                        name: "Dickerson",
                        date: "1910-06-20",
                        hobby: "coding",
                        address: "No.1 Century Avenue, Beijing",
                    },
                    {
                        rowKey: 1003,
                        name: "Larsen",
                        date: "2000-07-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Chongqing",
                    },
                    {
                        rowKey: 1004,
                        name: "Geneva",
                        date: "2010-08-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Xiamen",
                    },
                    {
                        rowKey: 1005,
                        name: "Jami",
                        date: "2020-09-20",
                        hobby: "coding and coding repeat",
                        address: "No.1 Century Avenue, Shenzhen",
                    },
                ],
            };
        },
    };
</script>
  • 更多特性和API请前往官网文档查看

3.2. Vue Good Table

Vue Good Table是一款基于Vue.js的易于使用、高度可配置且灵活的表格组件,使得在Web应用中呈现大量数据非常容易。Vue Good Table允许您对表格进行排序、分页、筛选、编辑、导出、自定义列、自定义行、悬停和展开/收缩行等操作。

Vue Good Table使用简单,只需要导入并在Vue实例中注册即可:

3.2.1. 安装使用

npm i vue-good-table

3.2.2. git地址和官网地址

  • git地址:xaksis/vue-good-table: An easy to use powerful data table for vuejs with advanced customizations including sorting, column filtering, pagination, grouping etc (github.com)
  • 官网地址:vue-good-table (xaksis.github.io)

3.2.3. 内容介绍

  1. 文档内容,官网文档首页

在这里插入图片描述

  1. 暂未在goodtable中找到复合表头实现的样例,有样例或实现api留言评论唤醒笔者即可!

3.3. Vue vxe-table

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式为零代码而设计…

  • 设计理念

    • 面向现代浏览器,高效的简洁 API 设计
    • 模块化表格、按需加载
    • 为单行编辑表格而设计,支持增删改查及更多扩展,强大的功能的同时兼具性能

3.3.1 功能

  • 基础表格
  • 配置式表格
  • 基础表单
  • 配置式表单
  • 斑马线条纹
  • 多种边框
  • 单元格样式
  • 列宽拖动
  • 最小/最大高度
  • 自适应宽高
  • 固定列
  • 多级表头
  • 表尾数据
  • 高亮行或列
  • 序号
  • 单选框
  • 复选框
  • 下拉选项
  • 开关
  • 排序
  • 多字段排序
  • 筛选
  • 合并单元格
  • 合并表尾
  • 导入/导出/打印
  • 显示/隐藏列
  • 加载中
  • 格式化内容
  • 自定义插槽 - 模板
  • 快捷菜单
  • 展开行
  • 分页
  • 工具栏
  • 下拉容器
  • 虚拟列表
  • 虚拟树
  • 增删改查
  • 数据校验
  • 数据代理
  • 键盘导航
  • 弹窗
  • 渲染器
  • 虚拟滚动
  • 虚拟合并
  • CSS 变量主题
  • (pro) 单元格区域选取
  • (pro) 单元格复制/粘贴
  • (pro) 单元格查找和替换

3.3.2. 安装使用

npm install xe-utils vxe-table@next

3.3.3 git地址和官网地址

  • git地址:x-extends/vxe-table: vxe-table vue 表单/表格解决方案 (github.com)
  • 官网地址:vxe-table v4 (vxetable.cn)

3.3.4. 内容介绍

  1. 官网内容

在这里插入图片描述

  1. 复合表头的实现

在这里插入图片描述

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'
const gridOptions = reactive({
  border: true,
  stripe: true,
  height: 500,
  columnConfig: {
    resizable: true
  },
  columns: [
    { type: 'seq', width: 50 },
    {
      title: '基本信息',
      children: [
        { field: 'name', title: 'Name' },
        {
          title: '其他信息',
          children: [
            { field: 'nickname', title: 'Nickname' },
            { field: 'age', title: 'Age', sortable: true }
          ]
        },
        { field: 'sex', title: 'Sex' }
      ]
    },
    { field: 'address', title: 'Address', sortable: true, showOverflow: true }
  ],
  data: [
    { id: 10001, name: 'Test1', nickname: 'T1', role: 'Develop', sex: 'Man', age: 28, address: 'Shenzhen' },
    { id: 10002, name: 'Test2', nickname: 'T2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', nickname: 'T3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', nickname: 'T4', role: 'Designer', sex: 'Women', age: 23, address: 'Shenzhen' },
    { id: 10005, name: 'Test5', nickname: 'T5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' },
    { id: 10006, name: 'Test6', nickname: 'T6', role: 'Designer', sex: 'Women', age: 21, address: 'Shenzhen' },
    { id: 10007, name: 'Test7', nickname: 'T7', role: 'Test', sex: 'Man', age: 29, address: 'Shenzhen' },
    { id: 10008, name: 'Test8', nickname: 'T8', role: 'Develop', sex: 'Man', age: 35, address: 'Shenzhen' }
  ]
})
</script>

3.4. Tabulator

Tabulator 是一个基于 JavaScript 的交互式数据表格库,它提供了丰富的功能和灵活性,可以用于在 Web 应用中展示和操作数据表格。Tabulator 允许你快速创建可排序、可筛选、可分页的表格,还支持自定义样式、模板、事件处理等。

一些 Tabulator 的特点和功能包括:

  • 丰富的特性: Tabulator 提供了排序、筛选、分页、编辑、行选择、复制粘贴、拖放等一系列功能,使得数据表格更具交互性和可操作性。

  • 自定义模板: 你可以自定义单元格内容的模板,以便在表格中显示自定义格式的数据。

  • 可扩展的插件: Tabulator 允许你使用插件来扩展功能,如导出数据、打印表格等。

  • 多种数据源: Tabulator 支持从本地数据、远程数据、Ajax 请求等多种数据源中获取数据。

  • 适应不同设备: Tabulator 是响应式的,可以在不同的设备上展示适应性强的表格。

  • 支持多种主题: Tabulator 提供多种内置主题,也支持自定义样式。

  • 强大的 API: Tabulator 提供了丰富的 API,可以通过编程方式控制表格的行为和状态。

  • 跨浏览器支持: Tabulator 支持各种现代浏览器,包括 Chrome、Firefox、Safari、Edge 等。

  • 开源免费: Tabulator 是开源项目,可以免费使用和修改。

你可以访问官方网站和 GitHub 仓库以获取更多关于 Tabulator 的信息、文档和示例。

3.4.1. 安装使用

npm install tabulator-tables --save

3.4.2. git地址和官网地址

官方网站: http://tabulator.info/

GitHub 仓库: https://github.com/olifolkerd/tabulator

3.4.3. 内容介绍

在这里插入图片描述

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

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

相关文章

在ubuntu上安装ns2和nam(ubuntu16.04)

在ubuntu上安装ns2和nam 版本选择安装ns2安装nam 版本选择 首先&#xff0c;版本的合理选择可以让我们避免很多麻烦 经过测试&#xff0c;ubuntu的版本选择为ubuntu16.04&#xff0c;ns2的版本选择为ns-2.35&#xff0c;nam包含于ns2 资源链接(百度网盘) 链接:https://pan.bai…

Leetcode Top 100 Liked Questions(序号198~234)

​198. House Robber ​ 题意&#xff1a;你是一个强盗&#xff0c;你要去抢劫&#xff0c;每个房子都有特定金额的钱&#xff0c;但是不能拿相邻的房子的钱 我的思路 有点像动态规划&#xff0c;但是首先把每个结点空一格的后缀和得到&#xff0c;2n 之后从(in-1;i>0;i…

详解I2C

I2C&#xff08;也常写作 I I C IIC IIC&#xff0c; I 2 C I^2C I2C&#xff09;&#xff0c;全称为Inter-Integrated Circuit&#xff08;“互连集成电路”&#xff09;&#xff0c;用于在集成电路之间进行短距离数据传输。它由Philips&#xff08;现在的NXP半导体&#xff0…

龙迅LT6911UXE HDMI转2PORT MIPIDSI/CSI,支持单PORT 4K60HZ,内置MCU,加音频

龙迅LT6911UXE 1.描述&#xff1a; LT6911UXE是一款高性能HDMI2.0到MIPI DSI/CSI转换器&#xff0c;可用于VR、智能手机和显示器应用。 HDMI2.0输入支持高达6Gbps的数据速率&#xff0c;这为60Hz的视频提供了足够的带宽。同时&#xff0c;还支持 HDCP2.3进行数据解密。对于M…

centos7.6离线升级gcc

1.下载需要的gcc&#xff0c;我这里下载的8.3.0版本&#xff1a; 各版本gcc下载地址 2.上传服务器后解压&#xff1a; tar -zvxf gcc-8.3.0.tar.gz --directory/usr/local/3.进入目录&#xff1a; cd /usr/local/gcc-8.3.0/contrib4.查看需要的依赖包具体是什么版本&#xf…

Navigation的基本使用

参考&#xff1a; Navigation Navigation的基本使用 目录 一、Navigation是什么&#xff1f;二、Navigation的三大件三、基本使用1. 导入依赖2. 创建三个不同的fragment用于页面的切换3. 创建导航图4. 设置导航menu5. Activity使用 四、Navigation源码原理解析 一、Navigation是…

基础算法-枚举算法

”现象“ 基础算法-枚举方法-学习 方法&#xff1a; 将问题的所有可能的答案一一列举&#xff0c;然后根据条件判断此答案是否合适&#xff0c;保留合适的&#xff0c;舍弃不合适的 优化点&#xff1a; 尽量减少枚举的可能&#xff0c;减少枚举的范围与条件尽量对问题简单化…

操作系统备考学习 day1 (1.1.1-1.3.1)

操作系统备考学习 day1 计算机系统概述操作系统的基本概念操作系统的概念、功能和目标操作系统的四个特征并发共享虚拟异步 操作系统的发展和分类操作系统的运行环境操作系统的运行机制 年初做了一个c的webserver 的项目&#xff0c;在学习过程中已经解除部分操作系统的知识&am…

想要创建一个抖音百科词条怎么做?

抖音作为一个热门的社交媒体平台&#xff0c;用户数量众多&#xff0c;每天产生大量的内容。创建一个抖音百科词条可以帮助你或你所关注的事物增加曝光和知名度。接下来&#xff0c;本文伯乐网络传媒将为你介绍如何创建一个成功的抖音百科词条。 搜集相关信息 搜集与词条相关的…

【STM32教程】第二章 通用输入输出口GPIO

资料下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj 提取码&#xff1a;jauj 1. GPIO的基本结构 1.1 概述 GPIO&#xff08;General Purpose Input Output&#xff09;意思是通用输入输出口可配置为8种输入输出模式&a…

面试题——网络IO模型

一、socket socket是在应用层和传输层中间的抽象层&#xff0c;它把传输层&#xff08;TCP/UDP&#xff09;的复杂操作抽象成一些简单的接口&#xff0c;供应用层调用实现进程在网络中的通信。Socket起源于UNIX&#xff0c;在Unix一切皆文件的思想下&#xff0c;进程间通信就被…

SAP-QM-质检操作

一、系统自动创建检验批 1、物料主数据设置 MM03-质量管理-检验设置-04来自生产收货的检验 检验类型 过账到检验库存&#xff1a;勾选进入检验库存 控制检验批&#xff1a;控制检验批的产生方式&#xff0c;按订单产生、按行产生、按凭证产生&#xff0c;例每个物料凭证项目…

antd5:form组件底层封装库field-form-1.37.0启动

一开始node版本是18.16.0 npm install发现安装依赖成功 npm start发现启动出错 node:internal/crypto/hash:71this[kHandle] new _Hash(algorithm, xofLen);^Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:71:19)…

神经网络NLP基础 循环神经网络 LSTM

用的时候&#xff0c;只关心token的输入&#xff0c;以及hidden state就好了 sequence的length是多少&#xff0c;lstm的cell的数量就是多少 LSTM BI-LSTM stacked lstm GRU 实现

手把手教你劳动仲裁

手把手教你劳动仲裁 前言什么是劳动仲裁劳动仲裁的痛点对公司没有影响&#xff0c;而你只拿到你该拿到的时间 个人劳动仲裁的流程第一步&#xff1a;去当地仲裁委立案窗口&#xff08;你公司所在地区的仲裁委&#xff09;第二步: 填写仲裁申请书个人信息企业信息请求事项事实缘…

【OpenCL基础 · 一】因源

文章目录 前言一、单核标量处理器的瓶颈1.提升时钟频率2.提升指令级并行能力 二、多核和向量化1.多核2.向量化 三、异构并行和OpenCL1.GPGPU2.CUDA和OpenCL 前言 随着人工智能的发展以及大部分场景中实时性的要求&#xff0c;人们对于计算机算力要求逐渐增加。为了提高计算速度…

独家揭秘!短视频商城小程序源码:打造属于你的购物新体验

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;短视频平台逐渐流行起来。借助短视频的视听魅力&#xff0c;人们可以更加轻松地了解产品和服务&#xff0c;这使得短视频平台在商业领域中扮演了重要的角色。而如今&#xff0c;短视频商城小程序源码横空出世&#xff0…

ElasticSearch学习4--复杂查询

1、查询分类 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如&#xff1a;match_all全文检索&#xff08;full text&#xff09;查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引库中匹配。例如&#xff1a; match_query 根据单个字段…

封装动态表单组件

技术栈&#xff1a;vue2 js webpack 需求&#xff1a; 利用数据渲染表单&#xff0c;实现代码的精简化及效率的提升。 效果图&#xff1a; 封装的组件&#xff1a; <div v-if"formConfig"><el-formv-bind"$attrs"ref"formDom":model…

为什么你懂英语但不能说流利 学习

目录 对于提升口语流畅度&#xff1a; 我们应该做到是输入和输出占比为3&#xff1a;7&#xff1b;可实际做到的是7&#xff1a;3 但是这个方法也有一个问题&#xff0c;就是没有错误反馈 最好的就是在一个开始的时候&#xff0c;就学对&#xff0c;第一次的效果很重要 另…