【layui】table使用下拉控件dropdown

本文介绍了一个使用layui框架实现的下拉控件示例。通过该示例可以了解如何在表格中添加带有更多操作选项的下拉菜单,并为每个表格行提供特定的状态选择。示例中详细展示了所需的HTML结构、JavaScript配置及事件绑定。

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

下拉控件dropdown文档 http://layuidropdown.microanswer.cn/.
在这里插入图片描述

<style>
.lay_menu>li{ cursor: pointer; height: 36px; line-height: 36px; }
.lay_menu>li:hover{ background: #f6f6f6; transition: 0.5s all; }
.lay_menu>li.layui_this{ background: #5FB878; color: #fff; }
</style>

<table class="layui-hide" id="test" lay-filter="test"></table>
<script type="text/html" id="barDemo">
     <a class="layui-btn layui-btn-xs" lay-filter="more" lay-dropdown="{template: '#table1toolMenu'}">更多操作 <i class="layui-icon layui-icon-down"></i></a>
</script>
<script id="table1toolMenu" type="text/html">
     <ul class="layui-dropdown-menu lay_menu">
         <li lay-event="getCheckData">获取选中行数据</li>
         <li lay-event="getCheckLength">获取选中数目</li>
         <li lay-event="isAll">验证是否全选</li>
     </ul>
 </script>
        
<script>
createScript("/static/admin/src/controller/dropdown/dropdown.js");
layui.use(['admin', 'table', 'view', 'form', 'layer', 'setter', 'dropdown'], function () {
    var $ = layui.$
        ,admin = layui.admin
        ,form = layui.form
        ,view = layui.view
        ,layer = layui.layer
        ,setter = layui.setter
        ,table = layui.table
        ,dropdown = layui.dropdown
        ,router = layui.router();
        
     table.render({
	    elem: '#test'
	    ,url:'../../test/table/demo1.json.js'/*tpa=http://www.layui.com/test/table/demo1.json*/
	    ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
	    ,cols: [[
	      {type: 'checkbox', fixed: 'left'}
	      ,{field:'sex', title:'性别', width:80, edit: 'text'}
	      ,{field:'city', title:'城市', width:100}
	      ,{field:'sign', title:'签名'}
	      ,{field:'experience', title:'积分', width:80}
	      ,{field:'ip', title:'IP', width:120}
	      ,{field:'logins', title:'登入次数', width:100}
	      ,{field:'joinTime', title:'加入时间', width:120}
	      ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
	    ]]
	    ,page: true
        ,done: function (res, curr, count) {
			// 按钮--更多操作
            dropdown.suite("[lay-filter='more']", {
                minWidth: 130,
                onShow: function ($maker, $down) {
                    $maker.next().find('.dropdown-pointer').remove();
                },
            });
            // 在表格渲染完成后进行下拉框渲染。
            for (var i = 0; i < res.data.length; i++) {
                drop_data.compl_status=res.data[i].compl_status;
                drop_data.compl_list=compl_list;
                dropdown.suite("[lay-filter='ft"+res.data[i].id+"']", {
                    data: drop_data,
                    minWidth: 130,
                    onShow: function ($maker, $down) {
                        $maker.parent(".layui-form-select").addClass('layui-form-selected');
                    },
                    onHide: function ($maker, $down) {
                        $maker.parent(".layui-form-select").removeClass('layui-form-selected');
                    },
                    success: function ($dom) {
                        $dom.parent(".layui-form-select").find(".lay_menu li").click(function (_item) {
                            var _id = $dom.prev().attr('data-pid');
                            var _status = $(this).attr('data-id');
                            var filter = $dom.prev().attr('lay-filter');
                            $(this).addClass('layui_this').siblings().removeClass('layui_this');
                            $dom.prev().val($(this).attr('data-name'));
                            
                            dropdown.hide("[lay-filter='"+filter+"']");
                        });
                        form.render();
                    }
                });
            }
		}
	  });
### Element UI 中 `el-table` 和 `el-dropdown` 的性能优化技巧 #### 一、关于 `el-table` 的性能优化 对于大型表格数据展示场景,`el-table` 可能会面临渲染效率低下的问题。以下是几种常见的优化方法: 1. **虚拟滚动技术** 使用虚拟列表来减少 DOM 节点的数量,只渲染当前视口内的行数。Element Plus 提供了一个插件 `vue-virtual-scroller` 或者可以自行实现逻辑[^2]。 2. **懒加载子组件** 如果某些列的内容较为复杂(如嵌套的下拉菜单或其他交互控件),可以通过监听事件动态加载这些内容,而不是一开始就全部渲染出来。 3. **固定表头与列宽计算** 当存在大量列时,应合理设置固定的宽度并开启 `fixed` 属性以防止因频繁调整布局而导致重绘开销过大[^1]。 4. **分页处理大数据集** 对于超大规模的数据源,推荐采用服务端分页的方式获取每一页所需显示的部分记录而非一次性请求整个集合到前端内存中存储。 5. **禁用不必要的特性** 关闭那些对业务无影响的功能选项比如默认排序图标等,默认情况下它们可能增加额外负担却未被充分利用起来。 ```javascript // 示例代码:通过分页控制数据量 <template> <div> <el-pagination @current-change="handlePageChange"></el-pagination> <el-table :data="pagedData"> <!-- 表格字段 --> </el-table> </div> </template> <script> export default { data() { return { allData: [], // 原始大数组 pageSize: 20, currentPage: 1, }; }, computed: { pagedData() { const start = (this.currentPage - 1) * this.pageSize; const end = start + this.pageSize; return this.allData.slice(start, end); } }, methods: { handlePageChange(pageNum){ this.currentPage = pageNum; } } } </script> ``` --- #### 二、针对 `el-dropdown` 的性能改进措施 当页面中有多个下拉框并且其内部项非常多的时候也需要考虑相应的策略降低资源消耗: 1. **按需加载选项** 不要预先填充所有的 dropdown items 列表而是等到用户点击触发后再异步去服务器抓取对应分类下面的具体条目信息回来呈现给使用者看即可满足需求同时也减少了初始阶段的整体体积大小从而加快首屏速度提升用户体验度。 2. **缓存机制** 实现本地化缓存方案保存之前已经查询过的类别及其关联明细以便下次再遇到相同情况可以直接调用无需重复网络通信操作节省时间成本提高响应速率。 3. **限制最大高度/数量** 设置好弹窗的最大可见区域范围以及最多允许展现出来的项目数目超出部分则提供滚动条让用户自己上下浏览查看其余隐藏部分内容这样既能保证界面整洁美观又能兼顾功能性要求不至于因为过长而显得杂乱不堪难以管理维护。 ```html <!-- 示例代码:带搜索功能的 Dropdown --> <el-dropdown trigger="click"> <span class="el-dropdown-link">Dropdown Menu<i class="el-icon-arrow-down el-icon--right"></i></span> <el-dropdown-menu slot="dropdown"> <el-input v-model="searchText" placeholder="Search..." /> <el-dropdown-item v-for="(item,index) in filteredItems" :key="index">{{ item.name }}</el-dropdown-item> </el-dropdown-menu> </el-dropdown> <script> import { debounce } from 'lodash'; export default { props:{ itemList:{type:Array,default:()=>[]}, }, data(){ return{ searchText:'', } }, computed:{ filteredItems(){ if(!this.searchText.trim())return this.itemList; let lowerCaseFilter=this.searchText.toLowerCase(); return this.itemList.filter(item=>item.name.toLowerCase().includes(lowerCaseFilter)); } }, watch:{ searchText(debouncedHandler){ debouncedHandler=debounce((newVal)=>{ console.log('Perform search with:', newVal); },300); debouncedHandler(newVal); } } }; </script> ``` --- ### 结论 通过对上述提到的各种手段的应用能够有效改善 element-ui 组件在不同应用场景中的表现水平达到更好的运行效果同时也能增强系统的稳定性和可扩展能力适应未来可能出现的新挑战新机遇不断进步发展下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值