ant-design-vue的a-table组件集成vue-draggable-resizable实现可伸缩列:从踩坑到填坑的实战指南

news2026/3/13 22:34:16
1. 为什么我们需要给a-table加上可伸缩列最近在重构一个后台管理系统UI框架从Element UI换到了Ant Design Vue。整体体验下来组件库很强大设计语言也很棒。但当我用到a-table组件时发现了一个不大不小的问题表格列不支持拖拽调整宽度。这功能在Element UI的el-table里是开箱即用的鼠标移到列头分隔线就能拖拽非常方便。但在Ant Design Vue里官方并没有内置这个功能。对于数据列很多、内容长短不一的表格来说这体验就有点打折扣了。用户没法自己调整列宽来看全数据要么得手动给每一列预设一个“足够宽”的宽度要么就得忍受被截断的省略号。好在Ant Design Vue的官方文档里提供了一个思路使用第三方插件vue-draggable-resizable来实现。文档里给了一个基础的示例代码看起来挺简单的。我当时心想这不就是复制粘贴的事儿吗结果我把示例代码搬到自己的项目里控制台的红字报错就接二连三地蹦出来了。踩坑的过程简直是一部血泪史。主要遇到了这么几个拦路虎列配置缺失我的columns里有些列没写width属性有些操作列既没写dataIndex也没写key。与内置功能冲突当表格启用了复选框row-selection后直接报错Cannot read property width of undefined整个表格都渲染不出来。样式错位拖拽手柄的位置不对或者拖拽时列宽更新不流畅。这些问题都不是文档示例里会告诉你的需要深入理解a-table的渲染机制和vue-draggable-resizable的工作方式才能解决。所以我决定把从“踩坑”到“填坑”的整个过程以及最终封装好的、可复用的混入Mixin方案分享出来。如果你也正在为a-table的列宽拖拽头疼那这篇实战指南应该能帮你省下不少折腾的时间。2. 核心原理与插件初探在动手填坑之前我们得先搞清楚两件事a-table是怎么渲染表头的vue-draggable-resizable这个插件又能做什么2.1 a-table的表头渲染与自定义a-table组件提供了一个非常强大的属性叫components。通过它我们可以自定义表格各个部分的渲染方式包括表头header、表体body和单元格cell。我们要实现的列拖拽本质上就是自定义每一个表头单元格th的渲染内容。具体来说我们需要覆盖components.header.cell这个属性。它会是一个函数接收三个参数hcreateElement函数、props当前单元格的属性、children单元格内的子元素。在这个函数里我们可以返回一个自定义的VNode在原本的th元素内部额外加入我们的拖拽手柄。// 这是一个简化的自定义表头单元格函数示例 const customHeaderCell (h, props, children) { // props中包含 key, dataIndex 等重要信息 // children 是原本该渲染的标题内容比如“用户姓名” return h(th, { // 合并原有的props ...props, // 添加一些自定义属性或样式 class: my-custom-header, style: { position: relative } }, [ children, // 先渲染原有内容 // 再渲染一个我们自己的拖拽手柄组件 h(DragHandle, { /* 手柄的props */ }) ]) } // 在a-table上使用 a-table :components{ header: { cell: customHeaderCell } } /理解了这一点我们就知道该在哪里“动手术”了。2.2 vue-draggable-resizable 插件速览vue-draggable-resizable是一个功能丰富的Vue组件顾名思义它可以让元素既能拖拽Draggable又能调整大小Resizable。对于我们的列宽调整场景我们主要用到它的水平拖拽axis‘x’和调整大小resizablefalse因为我们只拖拽边界能力。这里有几个关键属性和事件是我们后续实现的基础常用属性:w元素的宽度。我们会把它绑定到列的当前宽度上。:x元素在X轴的位置。这个很关键我们把手柄放在列的右边界它的x坐标就代表了列宽。:axis“x”限制只能沿X轴方向移动。:draggable“true”启用拖拽。:resizable“false”禁用调整大小我们只通过拖拽改变位置x来间接改变列宽。:parent“true”限制拖拽不出父元素边界防止手柄被拖飞。常用事件dragging拖拽过程中持续触发。我们可以在这里实时更新列的宽度让用户有即时的视觉反馈。dragstop拖拽停止时触发。我们可以在这里获取最终的精确宽度并同步到数据状态中。简单来说我们的方案就是在每个表头th的右侧绝对定位一个vue-draggable-resizable组件作为拖拽手柄。当用户水平拖拽这个手柄时手柄的x坐标即位置发生变化我们将这个变化映射为当前列width的变化并实时更新表格的渲染。3. 从官方示例到实战步步惊心的踩坑记录官方文档的示例代码是一个很好的起点但它假设了一个“理想情况”你的columns配置非常规范且表格没有其他复杂功能。一旦条件不符坑就来了。3.1 第一坑columns配置不规范导致拖拽失效这是最基础也最容易遇到的问题。vue-draggable-resizable组件需要知道它“附着”在哪一列上以及这一列初始的宽度是多少。它通过查找columns数组中对应项的dataIndex或key来建立关联并通过width属性获取初始值。问题现象表格渲染正常但所有列都无法拖拽或者某些列无法拖拽。控制台没有报错但功能静默失效。问题根源缺少width在自定义渲染函数里如果检测到col.width为undefined或null为了安全起见代码会直接返回一个普通的th不渲染拖拽手柄。所以任何没设width的列拖拽功能就直接没了。缺少dataIndex或key我们的代码需要通过props.key去columns数组里找到对应的列配置对象col。查找的依据就是col.dataIndex || col.key。如果某一列比如常见的“操作”列两者都没设置就找不到col对象后续访问col.width自然会出错。填坑方案规范columns配置这是最根本的解决办法。为每一列都显式地设置width单位是数字如width: 150。同时确保每一列都有唯一的标识要么是dataIndex对应数据字段要么是key用于无dataIndex的列如操作列。// 好的配置示例 const columns [ { title: 姓名, dataIndex: name, key: name, width: 120 }, { title: 年龄, dataIndex: age, key: age, width: 100 }, { title: 操作, key: operation, width: 150, scopedSlots: { customRender: operation } } ];在代码中增加健壮性判断即使我们要求规范配置代码本身也应该更健壮。在查找col和访问col.width之前进行严格的判断避免undefined错误。3.2 第二坑启用复选框后表格直接报错崩溃这个坑非常隐蔽而且一出现就是致命错误整个表格都渲染不出来。问题现象在a-table上添加了:row-selection”rowSelection”属性后页面白屏控制台报错Uncaught TypeError: Cannot read property ‘width’ of undefined。问题根源当a-table启用行选择器复选框时它会自动在columns的最前面插入一列用来渲染复选框。这一列是虚拟的它的key是一个固定的字符串’selection-column’。它不会出现在你定义的tableColumns数组里。在我们的自定义渲染函数中会遍历每一个th包括这个复选框列。当处理到key为’selection-column’的单元格时我们用props.key去tableColumns里查找自然是找不到的于是col就成了undefined。接下来代码里直接使用col.width就导致了上面的运行时错误。填坑方案在查找列配置对象的逻辑中对’selection-column’这个特殊的key进行单独处理。const { key, ...restProps } props; let col; // 关键判断如果是复选框列我们不需要也不应该去columns里找配置 if (key selection-column) { col {}; // 给它一个空对象避免后续报错并且这个列我们通常不需要拖拽 } else { col tbCols.find((item) { const k item.dataIndex || item.key; return k key; }); } // 后续判断如果col不存在或者col.width不存在则按普通列渲染不加拖拽手柄 if (!col || !col.width) { return th {...restProps}{children}/th; }这样复选框列就会被安全地跳过不会引发错误它本身也不具备拖拽功能通常也不需要。3.3 第三坑拖拽体验不跟手样式错乱解决了功能性问题接下来就是用户体验问题了。直接套用示例你可能会发现拖拽手柄看不见、位置不对或者拖拽时列宽变化不流畅。问题现象拖拽手柄那个可拖动的竖条没有出现在列的右侧边缘。拖拽时列宽变化有延迟不跟手。拖拽手柄的样式可能覆盖了表头文字。问题根源定位问题示例中可能没有给出完整的、正确的CSS样式。拖拽手柄需要绝对定位position: absolute在表头单元格th的右侧。如果th的position不是relative或者手柄的right值计算不对手柄就会“跑偏”。状态更新问题拖拽过程中dragging事件会频繁触发。我们需要在这个事件回调里实时更新代表列宽的数据状态。如果更新逻辑有误或者更新后没有触发表格重新渲染就会感觉卡顿。样式冲突vue-draggable-resizable组件自带一些样式可能会和ant-design-vue的表格样式冲突比如z-index不够高手柄被遮挡。4. 一站式解决方案封装健壮的tableDragResize混入踩了这么多坑我把所有修复和优化都整合到了一个单独的mixin文件中。这样在任何需要使用可伸缩列的表格组件里只需要引入这个混入然后调用一个方法即可真正做到开箱即用。4.1 核心代码逐行解析下面是我最终打磨好的src/mixins/tableDragResize.js文件内容我会加上详细注释。// src/mixins/tableDragResize.js import Vue from vue; // 1. 引入并全局注册组件也可在main.js中注册 import VueDraggableResizable from vue-draggable-resizable; Vue.component(vue-draggable-resizable, VueDraggableResizable); /** * 初始化拖拽功能的工厂函数 * param {Array} tbCols - 表格的columns配置数组 * returns {Function} - 用于a-table components.header.cell 的函数 */ function initDrag(tbCols) { // 2. 创建一个响应式对象用于存储每一列的当前拖拽宽度 // 初始值为columns中定义的width如果没定义则为0 const draggingMap {}; tbCols.forEach((col) { // 关键使用 dataIndex 或 key 作为映射的键 const mapKey col.dataIndex || col.key; if (mapKey) { draggingMap[mapKey] col.width || 0; } }); const draggingState Vue.observable(draggingMap); // 使其响应式 // 3. 返回antd需要的自定义渲染函数 return (h, props, children) { let thDom null; // 用于存储th DOM元素的引用 const { key, ...restProps } props; // 4. 根据当前单元格的key找到对应的列配置 let col; if (key selection-column) { // 处理复选框列不进行拖拽返回普通th return h(th, { ...restProps }, [children]); } else { col tbCols.find((item) { const k item.dataIndex || item.key; return k key; }); } // 5. 健壮性判断如果找不到列配置或该列没有设置宽度则返回普通th无拖拽 if (!col || typeof col.width ! number) { return h(th, { ...restProps }, [children]); } const currentKey col.dataIndex || col.key; // 6. 拖拽进行中的回调 const onDragging (x) { // x 是手柄当前的横坐标。我们将其直接设置为列的新宽度。 // 使用Math.max确保宽度至少为1px避免完全拖没。 const newWidth Math.max(x, 1); draggingState[currentKey] newWidth; // 同时更新原始columns数据中的width确保表格能响应式更新 col.width newWidth; }; // 7. 拖拽结束时的回调 const onDragstop () { // 拖拽结束后从真实的DOM元素中获取精确的宽度并更新状态 if (thDom) { const finalWidth thDom.getBoundingClientRect().width; draggingState[currentKey] finalWidth; col.width finalWidth; } }; // 8. 返回增强后的th元素 return h( th, { ...restProps, // 关键保存th的DOM引用 ref: (el) { thDom el; }, // 关键将draggingState中的宽度应用到th上 style: { ...restProps.style, width: ${draggingState[currentKey]}px }, class: resize-table-th, }, [ children, // 原有的表头内容标题、排序图标等 // 9. 渲染拖拽手柄组件 h(VueDraggableResizable, { key: currentKey, class: table-draggable-handle, w: 10, // 手柄本身的宽度很细 x: draggingState[currentKey] || col.width, // 手柄的初始位置 列宽 z: 1, axis: x, // 只允许水平拖拽 draggable: true, resizable: false, // 我们不改变手柄大小只改变位置 parent: true, // 限制在父元素内拖拽 onDragging: onDragging, onDragstop: onDragstop, }), ] ); }; } // 10. 导出混入对象 export default { methods: { /** * 生成可拖拽列宽的表格components配置 * param {Array} columns - 表格的columns配置 * returns {Object} - 适用于a-table的components对象 */ drag(columns) { return { header: { cell: initDrag(columns), // 注入自定义的表头单元格渲染逻辑 }, }; }, }, };4.2 关键样式让拖拽手柄恰到好处光有JS逻辑不够CSS样式是保证视觉和交互正确的另一半。将以下样式添加到你的全局样式文件如App.vue或main.css中。/* 全局拖拽列宽样式 */ .resize-table-th { position: relative !important; /* 必须为手柄提供定位基准 */ } .resize-table-th .table-draggable-handle { position: absolute; top: 0; /* 将手柄放置在列的右边缘 */ left: auto !important; right: -5px; /* 一半宽度溢出使得鼠标在边界附近更容易触发 */ bottom: 0; width: 10px; /* 与JS中的 w:10 对应 */ height: 100% !important; cursor: col-resize !important; /* 改变鼠标指针为列调整形状 */ touch-action: none; /* 防止触摸设备上的默认行为 */ z-index: 1; /* 确保手柄在最上层 */ opacity: 0; /* 默认透明鼠标悬停时显示 */ transition: opacity 0.2s; background: transparent; /* 背景透明避免遮挡 */ } /* 鼠标悬停在表头时显示拖拽手柄 */ .resize-table-th:hover .table-draggable-handle { opacity: 1; background: #1890ff; /* 给一个颜色提示可选 */ }样式要点position: relative必须加在th上。手柄通过absolute定位right: -5px让它一半在列内一半在列外增大可触发区域。cursor: col-resize提供正确的视觉反馈。默认透明悬停显示这样不会干扰表格正常外观。4.3 在业务组件中轻松使用现在在任何一个Vue单文件组件中使用可伸缩列变得极其简单。template div a-table bordered /* 建议加上边框拖拽视觉更清晰 */ :columnstableColumns :data-sourcedataList :row-selectionrowSelection /* 现在可以安全使用复选框了 */ :componentsdrag(tableColumns) /* 一行代码注入拖拽能力 */ rowKeyid !-- 操作列的自定义插槽 -- template #operation{ record } a-button clickedit(record)编辑/a-button /template /a-table /div /template script // 1. 引入混入 import tableDragResize from /mixins/tableDragResize; export default { name: UserTable, // 2. 混入 mixins: [tableDragResize], data() { return { rowSelection: { // ... 你的复选框配置 }, dataList: [ // ... 你的表格数据 ], // 3. 规范定义columns确保每列都有width和dataIndex/key tableColumns: [ { title: ID, dataIndex: id, key: id, width: 80, // 必须提供数字类型的宽度 }, { title: 用户名, dataIndex: username, key: username, width: 150, ellipsis: true, }, { title: 邮箱, dataIndex: email, key: email, width: 200, }, { title: 创建时间, dataIndex: createTime, key: createTime, width: 180, }, { title: 操作, key: operation, // 没有dataIndex的列必须要有key width: 120, // 必须提供宽度 slots: { customRender: operation }, // Vue 2.6语法 }, ], }; }, methods: { edit(record) { // ... } } }; /script5. 高级优化与最佳实践把功能跑通只是第一步要让这个特性在生产环境中稳定、好用还需要一些优化和注意事项。5.1 性能优化避免频繁重渲染拖拽过程中dragging事件触发频率极高如果每次事件都导致整个表格重新渲染性能会很差。我们的实现已经做了优化局部状态更新我们更新的是draggingState这个响应式对象和col.width这通常只会触发当前列表头单元格的更新而不是整个表格。使用getBoundingClientRect的时机getBoundingClientRect是一个会触发浏览器重排的API比较耗时。我们只在拖拽结束时dragstop调用一次用于获取精确的最终宽度避免了在拖拽过程中频繁调用它。你可以进一步优化比如在onDragging中使用requestAnimationFrame来节流更新但对于大多数场景当前的实现已经足够流畅。5.2 与表格其他功能的兼容性固定列fixed对于设置了fixed: ‘left’或fixed: ‘right’的列拖拽功能同样有效。但由于固定列的渲染层级和布局方式特殊你需要额外检查拖拽手柄的z-index和定位确保它不会被遮挡。通常需要将固定列的表头单元格的z-index调得更高一些。排序sorter和筛选filter我们的拖拽手柄是添加在表头内容之后的不会影响原有的排序图标和筛选图标。样式上需要确保手柄不会与这些图标重叠。列伸缩resizable与列拖动draggable注意区分我们实现的是调整列宽Resizable Column。Ant Design Vue本身支持列顺序拖拽Column Drag Drop这是两个不同的功能可以并存。但要注意事件冲突避免同时触发。5.3 封装成自定义指令或Composition API上面的方案是基于Vue 2的Mixin和Options API。如果你的项目是Vue 3强烈建议使用Composition API进行封装逻辑会更清晰复用性也更强。Vue 3 Composition API 思路// useTableColumnResize.js import { ref, computed } from vue; import VueDraggableResizable from vue-draggable-resizable-next; // Vue 3版本 export default function useTableColumnResize(columns) { const draggingState ref({}); // 初始化状态... // 生成components配置的函数... const dragComponents computed(() { return { header: { cell: initDrag(columns.value, draggingState) } }; }); return { dragComponents }; }在组件中使用script setup import { ref } from vue; import useTableColumnResize from ./useTableColumnResize; const tableColumns ref([...]); const { dragComponents } useTableColumnResize(tableColumns); /script template a-table :componentsdragComponents :columnstableColumns ... / /template5.4 常见问题自查清单如果你按照指南操作后仍然有问题可以按这个清单排查列宽拖拽完全无效✅ 检查columns中每一列是否都设置了width数字类型✅ 检查每一列是否都有dataIndex或key✅ 检查是否在表格上正确绑定了:components”drag(tableColumns)”✅ 检查浏览器控制台是否有JS错误✅ 检查全局样式.resize-table-th和.table-draggable-handle是否成功加载拖拽手柄看不见✅ 检查CSS中.resize-table-th的position: relative是否生效可能被其他样式覆盖✅ 检查手柄的right: -5px定位是否计算正确尝试调整这个值。✅ 尝试将手柄的opacity暂时设为1看它是否在某个位置但不可见。拖拽时列宽不更新或卡顿✅ 确认onDragging回调函数被正确触发并且newWidth值在变化。✅ 确认draggingState是响应式的Vue.observable或ref。✅ 检查是否有其他全局CSS限制了表格单元格的宽度如table-layout: fixed的副作用通常ant-table有自己的布局。启用复选框后报错✅ 确保你的initDrag函数中已经包含了对key ‘selection-column’的判断。这个方案在我目前管理的几个中后台项目中稳定运行经历了真实业务数据的考验。它可能不是唯一的方法但绝对是一个从实战坑里爬出来后总结出的、可靠且易于集成的方案。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…