赞
踩
目录
el-table数据项el-select下拉框,选中后请求接口
使用el-table组件时,可以通过调用方法来处理el-table的数据项的值。你可以在el-table的template中调用methods中定义的方法来处理数据项的值。
下面是一个示例代码:
- <template>
- <el-table :data="tableData">
- <el-table-column label="ID" prop="id">
- <template slot-scope="scope">
- {{ formatId(scope.row.id) }}
- </template>
- </el-table-column>
- <el-table-column label="Name" prop="name"></el-table-column>
- </el-table>
- </template>
-
- <script>
- export default {
- data() {
- return {
- tableData: [
- { id: 1, name: 'John' },
- { id: 2, name: 'Jane' },
- ],
- };
- },
- methods: {
- formatId(id) {
- // 在这里可以对id进行处理
- return '#' + id;
- },
- },
- };
- </script>
在上面的代码中,我们定义了一个el-table组件,并通过:data属性绑定数据。在el-table-column的template中,我们使用了slot-scope来获取el-table的每一行数据(scope.row)。然后在模板中调用formatId方法对id进行处理,返回处理后的id值。
在formatId方法中,你可以按照你的需求对id进行任何处理,然后返回处理后的值。例如,在上面的示例中,我们在id前面添加了一个井号作为格式化后的值。
这样,当el-table渲染时,会自动调用formatId方法来处理id的值,并显示格式化后的值。
- <el-table-column prop="status" label="数据状态" header-align="center" width="200">
- <template slot-scope="scope">
- <div style="display: flex; justify-content: center; align-items: center;">
- <span slot="reference" style=" margin-right: 8px;">
- <i class="dotClass" :style="getColor(scope.row.status)"></i>
- </span>
- {{ paramFormat(scope.row.status) }}
- </div>
- </template>
- </el-table-column>
-
-
- getColor(data) {
- if (data == "one") {
- return "#67C23A";
- } else if (data == "two") {
- return "#F56C6C";
- }
- ...
- },
-
-
-
- .dotClass {
- width: 12px;
- height: 12px;
- border-radius: 50%;
- display: block;
- }
要在在el-table的数据项中使用动态的el-tag,可以通过自定义列模板来实现。
首先,确保已引入Element UI库和Vue:
- <template>
- <el-table :data="tableData">
- <el-table-column label="姓名" prop="name"></el-table-column>
- <el-table-column label="标签" prop="tags">
- <template slot-scope="scope">
- <el-tag v-for="tag in scope.row.tags" :key="tag" :type="tag.type">{{ tag.name }}</el-tag>
- </template>
- </el-table-column>
- </el-table>
- </template>
在上面的例子中,我们使用了el-table-column来定义列,同时使用了slot-scope来访问每一行的数据。然后,我们在列模板中使用v-for指令来遍历每个人的tags数组,并为每个标签创建一个动态的el-tag。
需要注意的是,这里的type属性使用了:type="tag.type",这样我们可以根据每个标签的类型来设置不同的样式。
接下来,定义表格数据和标签数据:
- data() {
- return {
- tableData: [
- {
- name: '张三',
- tags: [{ name: '标签1', type: 'success' }, { name: '标签2', type: 'warning' }]
- },
- {
- name: '李四',
- tags: [{ name: '标签3', type: 'info' }, { name: '标签4', type: 'danger' }]
- }
- ]
- };
- }
在上面的例子中,我们有两个人的数据,每个人都有一个tags数组,数组中包含了每个人的标签信息。
这样,我们就可以在el-table的数据项中使用动态的el-tag了,每个人的标签会根据不同的类型显示不同的样式。
组件化代码举例
需配置columns: columns某一项添加 render 函数(传值:当前值、整行数据、第几行)
- <template>
- <div class="t-table" style="width:100%;">
- <t-table :table="table" :columns="table.columns" />
- </div>
- </template>
- <script>
- export default {
- data() {
- return {
- table: {
- data: [
- {
- id: '1',
- date: '2019-09-25',
- name: '张三',
- status: '2',
- address: '广东省广州市天河区'
- },
- {
- id: '2',
- date: '2019-09-26',
- name: '张三1',
- status: '1',
- address: '广东省广州市天广东省广州市天河区2广东省广州市天河区2河区2'
- },
- {
- id: '3',
- date: '2019-09-27',
- name: '张三2',
- status: '3',
- address: '广东省广州市天河区3'
- }
- ],
- columns: [
- { prop: 'name', label: '姓名', minWidth: '100' },
- {
- prop: 'status',
- label: 'render渲染1',
- minWidth: '180',
- render: (text, row, index) => {
- // console.log(777, text, row, index)
- let type = ''
- let val = ''
- switch (text) {
- case '1':
- type = ''
- val = '待处理'
- break
- case '2':
- type = 'warning'
- val = '进行中'
- break
- case '3':
- type = 'success'
- val = '已完成'
- break
- }
- return (
- <el-tag type={type}>
- {val}
- </el-tag>
- )
- }
- },
- {
- prop: 'status',
- label: 'render渲染2',
- minWidth: '180',
- render: (text, record) => {
- return (
- <el-switch
- active-value={'1'}
- inactive-value={'2'}
- v-model={record.enableStatus}
- onChange={() => this.handleStatusChange(record)}
- >
- {text}
- </el-switch>
- )
- },
- },
- { prop: 'address', label: '地址', minWidth: '220' },
- { prop: 'date', label: '日期', minWidth: '180' },
- { prop: 'address', label: '地址', minWidth: '220' }
- ],
- },
- }
- },
- methods: {
- // 状态修改
- handleStatusChange(row) {
- let text = row.status === '1' ? '启用' : '废止'
- this.$confirm(`确认要${text}这条数据吗?`, '警告', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- this.$message.success(`点击确定`)
- }).catch(() => {
- console.log('取消')
- row.status = row.status === '1' ? '2' : '1'
- })
- },
- // 新增
- add(val) {
- console.log('新增', val)
- },
- // 编辑
- edit(val) {
- console.log('编辑', val)
- },
- // 删除
- handleDelete(val) {
- console.log('删除', val)
- }
- }
- }
- </script>
- <el-table-column fixed="right" label="操作" width="100">
- <template slot-scope="scope">
- <el-button type="text" size="mini" :disabled="disFlag" @click="balabala(scope.row)">编辑</el-button>
- </template>
- <template slot-scope="scope">
- <el-button type="text" size="mini" @click="bala(scope.row)">详情</el-button>
- </template>
- </el-table-column>
- //balabala
- balabala(row) {
- this.$router.push(
- "/bala/gaga/detail?
- id=" + row.id +
- "&name=" + row.name
- );
- },
-
- //bala
- bala: function (row) {
- this.$router.push({
- path: "/bala/neinei/detail",
- query: {
- id: row.id,
- name: row.name,
- type: row.type,
- },
- });
- },
简单举例
- <el-table-column prop="reality_fans" label="输入框" show-overflow-tooltip>
- <template slot-scope="scope">
- <el-input v-model="scope.row.remark" @change="changeInput" placeholder="请输入内容" ></el-input>
- </template>
- </el-table-column>
要在el-table-table的数据项中加入输入框,可以通过自定义列模板来实现。
首先,确保已引入Element UI库和Vue:
- <template>
- <el-table :data="tableData">
- <el-table-column label="姓名" prop="name"></el-table-column>
- <el-table-column label="标签">
- <template slot-scope="scope">
- <el-input v-model="scope.row.input" placeholder="请输入标签"></el-input>
- </template>
- </el-table-column>
- </el-table>
- </template>
在上面的例子中,我们使用了el-table-column来定义列,同时使用了slot-scope来访问每一行的数据。然后,在列模板中使用el-input来创建一个输入框,并使用v-model指令来双向绑定每个人的input属性。
需要注意的是,我们使用了scope.row.input来绑定每个输入框的值,确保每个输入框都有独立的值。
接下来,定义表格数据:
- data() {
- return {
- tableData: [
- {
- name: '张三',
- input: ''
- },
- {
- name: '李四',
- input: ''
- }
- ]
- };
- }
在上面的例子中,我们有两个人的数据,每个人都有一个input属性,用于保存输入框的值。
这样,我们就可以在el-table的数据项中加入输入框了,每个人都有独立的输入框,可以根据需要进行输入操作。
可以通过自定义列插槽来实现添加上传文件按钮的功能。
首先,在 el-table 中添加一个自定义列插槽,用于显示上传文件按钮。可以通过 slot-scope
属性来获取当前行的数据项信息:
- <el-table v-bind:data="tableData">
- <el-table-column>
- <template slot-scope="scope">
- <!-- 显示上传文件按钮 -->
- </template>
- </el-table-column>
- <!-- 其他列定义 -->
- </el-table>
在自定义列插槽中添加一个 el-upload 组件来实现文件上传功能。在上传按钮的点击事件中,可以通过 scope.row 获取当前行的数据项信息,并执行相应的上传逻辑:
- <el-table v-bind:data="tableData">
- <el-table-column>
- <template slot-scope="scope">
- <!-- 显示上传文件按钮, :auto-upload="false"不然会上传两次 -->
- <el-upload
- action
- v-if="true"
- :show-file-list="false"
- :auto-upload="false"
- :on-change="(file, fileList) => uploadBiu(scope.row, file, fileList)"
- >
- <el-button size="small" type="text" icon="el-icon-upload">
- 上传文件
- </el-button>
- </el-upload>
- </template>
- </el-table-column>
- <!-- 其他列定义 -->
- </el-table>
在 Vue 组件的 methods 中定义上传文件的各个回调函数,进行相关的数据处理和反馈:
- methods: {
- uploadBiu(file) {
- // 上传处理逻辑
- },
- }
当用户点击上传文件按钮时,el-upload 组件将触发相应的事件,并将文件信息传递给回调函数,你可以在回调函数中进行相应的处理,例如发送请求上传文件、更新表格数据等。
那多个按钮呢, 传参插槽v-for即可 或者直接加
vue中使用table展示列表信息时,如果信息太长展示会很丑不美观,而且悬浮框拷贝不太友好
- <el-table-column prop="measures" label="companyName">
- <template slot-scope="scope">
- <el-popover
- placement="top"
- width="300"
- trigger="hover"
- :disabled="scope.row.companyName&& scope.row.companyName.length <= 20"
- >
- <div>{{ scope.row.measures }}</div>
- <span slot="reference" v-if="scope.row.companyName&& scope.row.companyName.length <= 20">{{scope.row.companyName}}</span>
- <span slot="reference" v-if="scope.row.companyName&& scope.row.companyName.length > 20">{{scope.row.companyName.substr(0, 20) + "..."}}</span>
- </el-popover>
- </template>
- </el-table-column>
由于会对结果进行判断.length()和处理subdtr(), 数据获取不及时, 会导致报错, 所以需要加个v-if 请求接口数据获取完毕后再进行处理
要在VueVue的el-table中使用el-link实现数据项的链接跳转,你可以使用作用域插槽和事件监听器来实现。
首先,你需要在el-table-column中使用作用域插槽来定义el-link的显示内容和点击事件。如下所示:
- <el-table-column label="Link">
- <template slot-scope="scope">
- <el-link type="primary" @click="handleLinkClick(scope.row)">{{ scope.row.linkText }}</el-link>
- </template>
- </el-table-column>
在这个示例中,我们将el-link放置在el-table-column的作用域插槽中,并使用scope.row来访问每个数据项的属性。我们还定义了@click事件监听器来处理链接的点击事件,并将当前数据项作为参数传递给handleLinkClick方法。
接下来,你可以在Vue组件的methods中定义handleLinkClick方法来处理链接的点击跳转。如下所示:
- methods: {
- handleLinkClick(row) {
- // 在这里执行跳转到目标链接的逻辑
- window.location.href = row.link;
- }
- }
在handleLinkClick方法中,你可以使用window.location.href来实现页面的跳转。你可以根据数据项中的属性来确定目标链接,然后跳转到相应的页面。
这样,你就可以在Vue的el-table中使用el-link实现数据项的链接跳转了。当用户点击链接时,会触发handleLinkClick方法,并跳转到目标链接所指定的页面。
简单举例
- <el-table-column prop="type" label="类型" width="120">
- <template scope="scope">
- <el-select v-model="scope.row.type" @change="handleCell(scope.$index, scope.row)">
- <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value">
- </el-option>
- </el-select>
- </template>
- </el-table-column>
在Vue的的el-table中使用el-select实现数据项的下拉框,并在选中后请求接口,可以使用作用域插槽和事件监听器来实现。
首先,你需要在el-table-column中使用作用域插槽来定义el-select的显示内容和选项。如下所示:
- <el-table-column label="Select">
- <template slot-scope="scope">
- <el-select v-model="scope.row.selectedValue" @change="handleSelectChange(scope.row)">
- <el-option v-for="option in options" :key="option.value" :label="option.label" :value="option.value"></el-option>
- </el-select>
- </template>
- </el-table-column>
在这个示例中,我们将el-select放置在el-table-column的作用域插槽中,并使用scope.row来访问每个数据项的属性。我们使用v-model来绑定选中的值,并使用@change事件监听器来处理下拉框的选中事件。
接下来,在Vue组件的data中定义options数组来配置el-select的选项。如下所示:
- data() {
- return {
- options: [
- { value: 'value1', label: 'Option 1' },
- { value: 'value2', label: 'Option 2' },
- { value: 'value3', label: 'Option 3' },
- ]
- }
- }
在这个示例中,我们定义了三个选项,每个选项都有一个value和label属性。
然后,你可以在Vue组件的methods中定义handleSelectChange方法来处理下拉框的选中事件,并在选中后请求接口。如下所示:
- methods: {
- handleSelectChange(row) {
- // 在这里发送请求接口的逻辑
- console.log('Selected value:', row.selectedValue);
- // 发送请求接口的示例代码
- ...
- }
- }
在handleSelectChange方法中,你可以访问选中的值(row.selectedValue),并使用相应的逻辑来发送请求接口。你可以使用诸如Axios之类的库发送异步请求,并在接口返回的数据中进行处理。
这样,你就可以在Vue的el-table中使用el-select实现数据项的下拉框,并在选中后请求接口了。当用户选中下拉框的选项时,会触发handleSelectChange方法,并根据需求发送请求接口。
- <template>
- <div class="t-table" style="width:100%;">
- <t-table :table="table" :columns="table.columns">
- <template #enableStatus="{param}">
- <el-switch
- v-model="param.row.enableStatus"
- :active-value="1"
- :inactive-value="2"
- @change="handleStatusChange(param.row)"
- ></el-switch>
- </template>
- </t-table>
- </div>
- </template>
- <script>
- export default {
- data() {
- return {
- table: {
- data: [
- {
- id: '1',
- date: '2019-09-25',
- name: '张三',
- status: '2',
- enableStatus: 1,
- address: '广东省广州市天河区'
- },
- {
- id: '2',
- date: '2019-09-26',
- name: '张三1',
- status: '1',
- enableStatus: 2,
- address: '广东省广州市天广东省广州市天河区2广东省广州市天河区2河区2'
- },
- {
- id: '3',
- date: '2019-09-27',
- name: '张三2',
- status: '3',
- enableStatus: 1,
- address: '广东省广州市天河区3'
- }
- ],
- columns: [
- { prop: 'name', label: '姓名', minWidth: '100' },
- {
- prop: 'status',
- label: 'render渲染',
- minWidth: '180',
- render: (text, row, index) => {
- // console.log(777, text, row, index)
- let type = ''
- let val = ''
- switch (text) {
- case '1':
- type = ''
- val = '待处理'
- break
- case '2':
- type = 'warning'
- val = '进行中'
- break
- case '3':
- type = 'success'
- val = '已完成'
- break
- }
- return (
- <el-tag type={type}>
- {val}
- </el-tag>
- )
- }
- },
- {
- prop: 'enableStatus',
- label: '插槽渲染',
- minWidth: '180',
- slotName: 'enableStatus'
- },
- { prop: 'address', label: '地址', minWidth: '220' },
- { prop: 'date', label: '日期', minWidth: '180' },
- { prop: 'address', label: '地址', minWidth: '220' }
- ],
- },
- }
- },
- methods: {
- // 状态修改
- handleStatusChange(row) {
- let text = row.status === 1 ? '启用' : '废止'
- this.$confirm(`确认要${text}这条数据吗?`, '警告', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- this.$message.success(`点击确定`)
- }).catch(() => {
- console.log('取消')
- row.status = row.status === 1 ? 2 : 1
- })
- },
- // 新增
- add(val) {
- console.log('新增', val)
- },
- // 编辑
- edit(val) {
- console.log('编辑', val)
- },
- // 删除
- handleDelete(val) {
- console.log('删除', val)
- }
- }
- }
- </script>
VSCode 最全实用插件(VIP典藏版) |
Vue超详细整理(VIP典藏版) |
Vue中created,mounted,updated详解 |
一文快速上手Echarts(持续更新) |
Vue中el-table数据项扩展各种类型总结(持续更新) |
有用请点赞,养成良好习惯!
疑问、交流、鼓励请留言!
欢迎补充!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。