vue el-table如何给Tooltip 文字添加复制按钮

本文描述了如何在项目中处理长数据复制需求,通过结合el-table的自适应显示和el-tooltip进行提示,同时实现数据复制功能,包括代码实现和字符串截取方法的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 接项目需求要让用户可以点击按钮复制该条数据的名称。

需求 1.  该条数据过长,不允许他换行,超过表格内容用...显示 鼠标移上去显示提示信息

需求  2.  允许该条数据复制

思路:1. 使用el-table表格自带的功能 show-overflow-tooltip 超出部分自动显示...。但是有问题,                   就 是复制功能不能实现。

            2.直接pass掉此方法,直接用el-tooltip提示信息再加上插槽能实现 提示+复制 功能

            3.使用el-tooltip方法,就需要操作显示内容来控制长度

代码实现:

1. 提示信息:

<el-table-column
              min-width="160"
              prop="rule"
              property="资产定义"
              label="名称"
            >
              <template #default="scope">
                <div>
                  <!-- {{ scope.row.rule }} -->
                  <el-tooltip placement="top" popper-class="top-tooltip">
                    <template #content>
                      {{ scope.row.rule }}
                      <el-button
                        link
                        type="primary"
                        icon="Edit"
                        @click="copyData(scope.row)"
                      >
                        复制
                      </el-button>
                    </template>
                    {{
                      scope.row.rule.substring(
                        0,
                        Math.min(60, scope.row.rule.length)
                      ) + '...'
                    }}
                  </el-tooltip>
                </div>
              </template>
            </el-table-column>



//控制提示框宽度
<style>
.top-tooltip{
  font-size: 14px !important ;
  max-width: 500px !important ;
}
</style>

2.复制功能:

const copyData = row => {
  console.log(row); //每一行的数据
  var Url2 = row.rule; //每一行的某个值,如选中的当前行的url
  var oInput = document.createElement('input'); //创建一个隐藏input(重要!)
  oInput.value = Url2; //赋值
  console.log(oInput.value);
  document.body.appendChild(oInput);
  oInput.select(); // 选择对象
  document.execCommand('Copy'); // 执行浏览器复制命令
  oInput.className = 'oInput';
  oInput.style.display = 'none';
  ElMessage.success('复制成功');
};

 注意:内容过长,可以用截取字符串的方法,以下为两种方法,自行选择

1. 字符串的 slice 方法

const str = "http://v9-non80-e.toutiaovod.com/$(param)
/64db0b4c/video/tos/cn/tos-cn-ve-0022/o4rEQzbISTNlAUy1XfUxAChBazKntIAbsQAsDh";
const truncatedStr = str.slice(0, 60);
console.log(truncatedStr);


注意:如果字符串的长度不足60个字符,slice 方法将返回整个字符串

 2. 使用 substring 方法

const str = "http://v9-non80-e.toutiaovod.com/$(param)
/64db0b4c/video/tos/cn/tos-cn-ve-0022/o4rEQzbISTNlAUy1XfUxAChBazKntIAbsQAsDh";
const truncatedStr = str.substring(0, Math.min(60, str.length));
console.log(truncatedStr);


//想确保截取的长度不超过60个字符

### 在 Element UI 的 `el-table` 中集成 Tooltip 为了实现在表格中鼠标悬停时显示更多信息的功能,可以采用多种方式来配置 `el-tooltip` 组件。以下是几种常见的方式: #### 方法一:直接在列定义内使用 `el-tooltip` 通过将 `el-tooltip` 放置在自定义渲染函数内部,可以在特定条件下触发提示框。 ```vue <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"> <!-- 使用作用域插槽 --> <template slot-scope="scope"> <el-tooltip effect="dark" :content="scope.row.address" placement="top-start"> <span>{{ scope.row.address | truncate }}</span> <!-- 这里假设有一个过滤器用于截断过长的文字 --> </el-tooltip> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ // 表格数据... ] }; } }; </script> ``` 这种方法适用于简单的场景,在单元格内容超出一定长度时自动隐藏多余部分并提供完整的文本作为提示信息[^1]。 #### 方法二:利用 `render-header` 属性定制表头 如果希望仅当用户将光标移到表头上方时才弹出提示,则可以通过设置 `render-header` 来控制这一行为。 ```javascript // JavaScript 部分 methods: { renderHeader(h, { column }) { const tooltipProps = { props: { content: "这是关于年龄的一些说明", placement: 'bottom' }, scopedSlots: { default: () => ( <span>{column.label}</span> ) } }; return ( <el-tooltip {...tooltipProps}> <span class="header-label">{column.label}</span> </el-tooltip> ); } } ``` 上述代码片段展示了如何创建带有工具提示的表头标签[^2]。 #### 方法三:结合 `el-popover` 和 `el-table` 对于更复杂的需求,比如想要展示动态生成的内容或是格式化的HTML结构,可以选择引入 `el-popover` 组件替代传统的 `el-tooltip`。 ```html <!-- HTML 结构 --> <el-table :data="tableData"> ... <el-table-column prop="description" label="描述"> <template slot-scope="scope"> <el-popover trigger="hover" title="详细描述" width="200" popper-class="custom-popper"> <p v-html="formatDescription(scope.row.description)"></p> <div slot="reference">{{ formatShortenedDesc(scope.row.description) }}</div> </el-popover> </template> </el-table-column> ... </el-table> ``` 这种方式允许更加灵活地处理要呈现的信息,并且支持富文本形式的输出[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值