前端学习笔记二:element-ui中表格过长内容隐藏显示、el-table点击按钮获得一行的数据、判断字符串中是否包含某个字符串

目录

一、el-table表格

二、Popover 弹出框

三、el-table点击按钮获得一行的数据

         四、html—js 判断字符串中是否包含某个字符串


一、el-table表格

在使用VUE显示后台数据时,经常会遇到数据过长,显示出来的效果很难看,如下图所示:

         上图中,红框框出的内容由于长度过长,占据了三行空间,如果内容更多的话,占据行数就更多了,表格中列数一多的话,显出出来的效果会很难看。

        为了解决上述问题,我们可以利用<el-table-column>组件提供的一个属性::show-overflow-tooltip='true' 添加该属性,会将过长的部分内容隐藏起来,并且在鼠标悬停在内容上面时,会以悬浮框的形式将所有数据显示出来,代码如下所示:

<el-table-column 
    label="DeviceId" 
    prop="deviceId" 
    :show-overflow-tooltip="true">
</el-table-column>

效果如下图所示:

        从上图效果中,可以看出,框出的内容在显示时将其过长的部分以省略号...代替,而当鼠标放置到内容上面时,包括隐藏数据的所有数据以悬浮框的形式显示出来。这种方法即达到了使页面美观,也达到了数据显示的的目的,可以在前端使用表格显示数据的时候采用。

        但是,这种方法有一个很大的弊端,即鼠标悬停显示的数据无法复制。为了解决这个问题,可以在表格中采用Popover 弹出框组件。

二、Popover 弹出框

element-ui中,表格使用Popover 弹出框组件代码如下:

 <!-- <el-table-column label="DeviceId" prop="deviceId" :show-overflow-tooltip="true"></el-table-column> -->
			<el-table-column label="deviceId" prop="deviceId">
				<template slot-scope="scope">
					<el-popover
					placement="top-start"
					width="400"
					trigger="hover">
						<span>{{scope.row.deviceId}}</span>
						<span slot="reference">{{scope.row.deviceId.substr(1,20) + "..."}}</span>
					</el-popover>
				</template>
			</el-table-column>

最终效果如下所示:

        从上图可以看出,使用Popover 弹出框组件,我们不仅在鼠标指向内容时,在悬浮框中将所有内容显示出来,鼠标还可以一如到悬浮框,复制自己想要的内容。 

三、el-table点击按钮获得一行的数据

获取某一行数据有两种方式:

        一种是在标签el-table上添加行单击事件***@row-click=“handleEdit**”*,但是有时候我们想只是点击一下某个操作按钮,比如保存按钮来获取row,这个时候这种方式就不合适了。所以此时我们用下面这种方法。

通过插槽的方式来获取:

<el-table-column label="操作">
	<template slot-scope="scope"> 
 		<el-button type="text" size="small" @click.native.prevent="savedata (scope.row)">
 		保存
 		</el-button>
    </template>
</el-table-column>

methods:

savadata(row) {
	console.log(row)
}

四、html—js 判断字符串中是否包含某个字符串

//str.includes("")返回一个布尔值,值为true时表示包含
	var str = "hello Tara";
	if(str.includes("Tara")){
		alert("Hi,Tara");
	}

我的详情界面里只显示了搜索两个字,问卷标题等搜索框都没有出现,是不是我这个页面没有导入element组件,界面代码如下:<template> <!-- 顶部搜索区域 --> <div class="filter-container"> <el-form :inline="true" :model="searchForm"> <!-- 问卷标题搜索 --> <el-form-item label="问卷标题"> <el-input v-model="searchForm.dcWjTitle" placeholder="输入问卷标题" clearable /> </el-form-item> <!-- 被测评人ID搜索 --> <el-form-item label="被测评人ID"> <el-input v-model="searchForm.dcid" placeholder="输入被测评人ID" clearable /> </el-form-item> <!-- 部门选择 --> <el-form-item label="人员部门"> <el-select v-model="searchForm.dcDept" placeholder="选择部门" clearable > <el-option v-for="dept in departments" :key="dept.value" :label="dept.label" :value="dept.value" /> </el-select> </el-form-item> <!-- 状态选择 --> <el-form-item label="提交状态"> <el-select v-model="searchForm.state" placeholder="选择状态" clearable > <el-option label="已提交" value="1" /> <el-option label="未提交" value="0" /> </el-select> </el-form-item> <el-form-item> <el-button type="primary" @click="handleSearch" icon="el-icon-search" >搜索</el-button> </el-form-item> </el-form> </div> <!-- 数据表格 --> <el-table :data="filteredData"> <!-- 表格列定义 --> </el-table> </template> <script> export default { data() { return { searchForm: { dcWjTitle: '', dcid: '', dcDept: '', state: '' }, rawData: [], // 原始数据 departments: [ // 部门选项 { label: '技术部', value: 'tech' }, { label: '市场部', value: 'market' } ] } }, computed: { // 过滤后的数据 filteredData() { return this.rawData.filter(item => (!this.searchForm.dcWjTitle || item.title.includes(this.searchForm.dcWjTitle)) && (!this.searchForm.dcid || item.dcid === this.searchForm.dcid) && (!this.searchForm.dcDept || item.dept === this.searchForm.dcDept) && (!this.searchForm.state || item.state === this.searchForm.state) ) } }, methods: { // 触发搜索 handleSearch() { this.fetchFilteredData() }, // 从后端获取数据 async fetchFilteredData() { try { const params = { title: this.searchForm.dcWjTitle, dcid: this.searchForm.dcid, dept: this.searchForm.dcDept, state: this.searchForm.state } // 调用后端API(示例) const { data } = await axios.get('/api/questionnaires', { params }) this.rawData = data } catch (error) { console.error('获取数据失败', error) } } } } </script>
最新发布
07-15
<think>我们正在解决Vue页面中Element UI组件不显示的问题。根据引用[1]和[2],问题通常是由于未正确引入或注册Element UI组件导致的。下面将按照步骤进行排查和修复。 ### 步骤1: 检查Element UI的安装和引入 #### 1.1 确认是否已安装Element UI 在项目根目录下运行以下命令(使用npm): ```bash npm list element-ui ``` 或者(使用yarn): ```bash yarn list element-ui ``` 如果未安装,请安装: ```bash npm install element-ui --save # 或 yarn add element-ui ``` #### 1.2 检查全局引入(适用于Vue2) 在项目的入口文件(通常是`main.js`)中,应该有以下代码: ```javascript import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` ### 步骤2: 检查按需引入(如果使用按需加载) 如果项目使用按需加载,需要确保: - 安装了`babel-plugin-component` - 配置了babel #### 2.1 安装babel插件 ```bash npm install babel-plugin-component -D # 或 yarn add babel-plugin-component -D ``` #### 2.2 配置babel 在`babel.config.js`或`.babelrc`中添加: ```javascript module.exports = { presets: [ '@vue/cli-plugin-babel/preset' ], plugins: [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ] ] } ``` #### 2.3 按需引入组件 在需要使用的组件中,单独引入并注册: ```javascript import { Button, Select } from 'element-ui'; export default { components: { ElButton: Button, ElSelect: Select } } ``` ### 步骤3: 检查组件名称拼写 确保在模板中使用的组件名称正确: - 使用kebab-case(短横线分隔)或PascalCase(首字母大写) - 例如:`<el-button>`或`<ElButton>` ### 步骤4: 检查组件局部注册 如果组件是局部注册的,确保在使用它的组件中正确导入并注册(如步骤2.3所示)。 ### 步骤5: 检查样式文件 确保引入了Element UI的样式文件: ```javascript import 'element-ui/lib/theme-chalk/index.css'; // 全局引入 // 或按需引入的样式(由babel-plugin-component自动处理) ``` ### 步骤6: 检查浏览器控制台错误 打开浏览器的开发者工具(F12),查看控制台是否有以下错误: - 未找到组件:说明注册问题 - 样式错误:说明样式文件未正确加载 ### 步骤7: 检查Vue版本 Element UI 主要支持 Vue2。如果是 Vue3 项目,需要使用 Element Plus。 #### 7.1 安装 Element Plus ```bash npm install element-plus --save # 或 yarn add element-plus ``` #### 7.2 在 Vue3 中引入 在`main.js`中: ```javascript import ElementPlus from 'element-plus'; import 'element-plus/dist/index.css'; createApp(App).use(ElementPlus).mount('#app'); ``` ### 修复示例 假设问题是因为未全局引入,修复方法如下: 1. 在`main.js`中正确引入: ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import App from './App.vue'; Vue.use(ElementUI); new Vue({ render: h => h(App), }).$mount('#app'); ``` 2. 在组件中直接使用: ```vue <template> <el-button type="primary">主要按钮</el-button> </template> ``` ### 常见问题总结 | 问题原因 | 解决方法 | |---------|---------| | 未安装Element UI | 执行`npm install element-ui` | | 未全局引入 | 在`main.js`中引入并`Vue.use(ElementUI)` | | 按需引入未配置 | 安装并配置`babel-plugin-component` | | 组件名称拼写错误 | 检查模板中的组件名 | | 未引入样式文件 | 引入`element-ui/lib/theme-chalk/index.css` | | Vue3项目使用Element UI | 改用Element Plus并正确引入 | ### 相关问题 1. 如何在Vue3项目中正确使用Element Plus? 2. 按需引入Element UI后,如何确认配置生效? 3. 为什么Element UI的样式没有加载? 4. 如何解决Element UI组件注册失败的问题? 5.Vue项目中同时使用Element UI和其他UI库需要注意什么? [^1]: 解决 Vue 项目中 Element UI 组件未注册的问题:从错误排查到撤销操作 [^2]:Vue学习笔记Vue入门:Vue3项目中导入Element Plus UI组件</think>### 解决 Vue 页面中 Element UI 组件不显示的问题 #### 1. **检查 Element UI 是否已安装** 在项目根目录运行以下命令检查安装状态: ```bash npm list element-ui # 或 yarn list element-ui ``` 如果未安装,请执行安装命令: ```bash npm install element-ui --save # 或 yarn add element-ui ``` #### 2. **确认全局引入配置** 检查项目入口文件(通常是 `src/main.js`),确保有以下引入代码: ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); // 全局注册组件[^1] ``` #### 3. **验证按需引入(如使用)** 如果使用按需引入,请检查: ```javascript // 在具体组件中 import { ElButton, ElSelect } from 'element-plus'; // Vue3 使用 element-plus[^2] export default { components: { ElButton, // 必须局部注册组件 ElSelect } } ``` #### 4. **检查组件使用方式** 确保模板中使用正确的组件名称: ```vue <!-- 正确示例 --> <el-button type="primary">提交</el-button> <!-- 错误示例 --> <element-button>提交</element-button> <!-- 错误命名 --> ``` #### 5. **排查常见错误** - **拼写错误**:检查组件名是否拼写正确(区分大小写) - **嵌套层级**:确保组件不在 `v-if="false"` 或未渲染的容器内 - **样式冲突**:检查浏览器控制台是否有 CSS 加载错误 - **版本兼容**:Vue 2 使用 `element-ui`,Vue 3 使用 `element-plus` #### 6. **调试步骤** 在浏览器控制台检查: ```javascript // 检查组件是否注册成功 console.log(Vue.options.components.ElButton) // 应该返回组件选项 ``` #### 7. **完整修复示例** ```javascript // src/main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) // 关键注册步骤[^1] new Vue({ render: h => h(App) }).$mount('#app') ``` ```vue <!-- App.vue --> <template> <div> <!-- 正确使用组件 --> <el-button type="success">测试按钮</el-button> </div> </template> ``` ### 常见问题解决方案 | 问题现象 | 解决方案 | |---------|---------| | 组件显示为普通HTML标签 | 检查全局注册 `Vue.use(ElementUI)` | | 样式丢失 | 确认引入了CSS文件 `import 'element-ui/lib/theme-chalk/index.css'` | | 控制台报未注册错误 | 检查组件名拼写或局部注册 | | Vue3项目组件不显示 | 改用 `element-plus` 并安装对应版本 | ### 相关问题 1. Vue2 和 Vue3 在使用 Element UI 时有哪些主要区别? 2. 如何实现 Element UI 组件的按需引入以优化打包体积? 3. 为什么 Element UI 的样式在部分环境下会失效? 4. 如何解决多主题切换时 Element UI 样式冲突问题? 5. 使用 Element UI 时有哪些常见的浏览器兼容性问题? [^1]: 解决 Vue 项目中 Element UI 组件未注册的问题:从错误排查到撤销操作 [^2]:Vue学习笔记Vue入门:Vue3项目中导入Element Plus UI组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等到鸡吃完米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值