能否为ui-grid创建可展开行并以UL LI展示详情的自定义模板?
当然可以实现!ui-grid的自定义模板机制完全支持你想要的这种「展开行以UL/LI列表展示详情」的需求,我来给你一步步拆解具体实现方法:
实现步骤
1. 先启用ui-grid的展开行功能
首先要在你的grid配置里开启expandable相关选项,指定自定义模板的位置或者内容:
$scope.gridOptions = { // 指向自定义展开模板(可以是外部HTML文件,也可以直接写内联模板) expandableRowTemplate: 'expandable-row-template.html', // 根据你的详情内容高度调整这个值 expandableRowHeight: 220, // 基础列配置 columnDefs: [ { name: 'id', displayName: 'ID' }, { name: 'username', displayName: '用户名' }, // 其他列定义... ], // 你的数据源 data: yourDataSource };
2. 编写UL/LI格式的自定义展开模板
方式一:外部HTML模板
创建一个名为expandable-row-template.html的文件,用UL/LI结构渲染行详情:
<ul class="row-details-list"> <li><strong>用户ID:</strong> {{row.entity.id}}</li> <li><strong>用户名:</strong> {{row.entity.username}}</li> <li><strong>邮箱:</strong> {{row.entity.email}}</li> <li><strong>注册时间:</strong> {{row.entity.registerDate | date:'yyyy-MM-dd HH:mm'}}</li> <!-- 按需添加更多需要展示的详情字段 --> </ul>
方式二:内联模板
如果不想单独创建HTML文件,也可以直接把模板内容写在expandableRowTemplate里,用ES6模板字符串包裹:
$scope.gridOptions.expandableRowTemplate = ` <ul class="row-details-list"> <li><strong>用户ID:</strong> {{row.entity.id}}</li> <li><strong>用户名:</strong> {{row.entity.username}}</li> <li><strong>邮箱:</strong> {{row.entity.email}}</li> </ul> `;
3. 样式优化(可选)
为了让列表看起来更整洁美观,可以添加一些自定义CSS:
.row-details-list { list-style: none; padding: 16px; margin: 0; } .row-details-list li { margin-bottom: 10px; font-size: 14px; } .row-details-list strong { display: inline-block; width: 110px; color: #2c3e50; font-weight: 600; }
4. 异步加载详情数据(如果需要)
如果你的详情数据不是直接包含在主行的entity里,而是需要通过API异步获取,可以借助expandableRowScope定义加载方法:
$scope.gridOptions.expandableRowScope = { fetchDetails: function(row) { // 调用你的数据服务获取详情 userService.getUserDetails(row.entity.id) .then(function(res) { // 把获取到的详情数据挂载到row.entity上 row.entity.extraDetails = res.data; }); } };
然后在模板里初始化加载并渲染异步数据:
<ul class="row-details-list" ng-init="fetchDetails(row)"> <li><strong>部门:</strong> {{row.entity.extraDetails.department}}</li> <li><strong>职位:</strong> {{row.entity.extraDetails.position}}</li> <li><strong>入职时间:</strong> {{row.entity.extraDetails.joinDate | date:'yyyy-MM-dd'}}</li> </ul>
其实ui-grid的自定义模板支持任意HTML结构,官方文档可能没有直接给出UL/LI的示例,但这种用法完全在框架的扩展能力范围内,放心用就好。
内容的提问来源于stack exchange,提问作者Sridhar
相关产品推荐
相关产品推荐

