vue3应用elementPlus table并滚动显示问题

2022-12-29 16:38:35

目录vue3elementPlustable并滚动显示vue3elementPlustable对tooltip格式修改解决方法总结vue3elementPlustable并滚动显示效果类似...

目录
vue3 elementPlus table并滚动显示
vue3 elementPlus table对tooltip格式修改
解决方法
总结

vue3 elementPlus table并滚动显示

效果类似

vue3应用elementPlus table并滚动显示问题

其实也没啥,代码部分,

1、首先使用了element plus的table

<template>
  <div>
    <el-table
      ref="table1"
      :data="state.data"
      height="250"
    >
      <el-table-column prop="station" label="站点" width="90" align="center" />
      <el-table-column prop="city" label="地市" width="55" align="center" />
      <el-table-column prop="date" label="日期" width="75" align="center" />
      <el-table-column prop="level" label="等级" width="70" align="center" />
    </el-table>
  </div>
</template>

2、设置定时器

<script setup>
import { reactive, onMounted, ref } from "vue";
import { getWaterData as getDataApi } from "@/modules/api/home";

const state = reactive({
  data: [],
});

const table1 = ref();

onMounted(() => {
  getDataApi().then((data) => {//获取数据
    state.data = data;
    scroll(table1.value.$refs.bodyWrapper);//设置滚动
  });
});
</script>

<script>
//scroll方法不用对外,所以放在<script>里了
const scroll = (tableBody) => {
  let isScroll = true;

  const dom1 = tableBody.getElementsByClassName("el-scrollbar__wrap")[0];

  //鼠标放上去,停止滚动;移开,继续滚动
  dom1.addEventListener("mouseover", () => {
    isScroll = false;
  });
  dom1.addEventListener("mouseout", () => {
    isScroll = true;
  });

  setInterval(() => {
    if (isScroll) {
      dom1.scrollTop += 1;
      if (dom1.clientHeight + dom1.scrollTop == dom1.scrollHeight) {
        dom1.scrollTop = 0;
      }
    }
  }, 100);
};
</script>

注意控制的dom是

table1.value.$refs.bodyWrapper.getElementsByClassName("el-scrollbar__wrap")[0]

这是vue3中应用element plus 的table,网上许多教程 说控制this.$refs.table.bodyWrapper的,不好使,没有作用。

vue3 elementPlus table对tooltip格式修改

描述:将返回来的数据拼在一起 用逗号隔开

解决方法

<el-table-column
 prop="airportInfos"
 label="管辖机场"
>
 <template #default="scope" v-if="false">
  {{
   void (scope.row.temp = scope.row.airportInfos
    .map(
     (el) =>
      el.ident +
      (el["designator"] === "  "
       ? ""
       : "(" + el["designator"] + ")")
    )
    .join(","))
  }}
  <el-tooltip placement="top">
   <template #content>
    {{ scope.row.temp }}
   </template>
   <div class="ellipsis diyname-ellipsis-width">
    {{ scope.row.temp }}
   </div>
  </el-tooltip>
 </template>
</el-table-column>
<el-table-column
 prop="airportInfos"
 label="管辖机场"
 :formatter="formatter"
 show-overflow-tooltip
>
</el-table-column>

// 使用formatter
const formatter = (row, column, cellValue) => {
 return cellValue
  .map(
   (el) =>
    el.ident +
    (el["designator"] === "  " ? "" : "(" + el["designator"] + ")")
  )
  .join(",");
};

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。