自定义条件可编辑单元格模板问题:实现Grid条件编辑器模板
嘿,我来帮你把这个ui-grid的条件编辑器模板给理顺并完善好~你的思路其实已经很对了,就是通过条件判断来切换不同的输入控件,下面是完整的实现方案:
实现ui-grid条件化编辑器模板
完整的编辑器模板代码
<div> <form name="inputForm"> <!-- 当行的name为'some_name'时显示下拉选择框 --> <select ng-show="row.entity.name === 'some_name'" ui-grid-edit-dropdown ng-model="MODEL_COL_FIELD" class="form-control"> <option value="true">True</option> <option value="false">False</option> </select> <!-- 其他情况显示常规文本输入框 --> <input ng-show="row.entity.name !== 'some_name'" type="text" ng-model="MODEL_COL_FIELD" class="form-control" ui-grid-edit-input> </form> </div>
关键细节说明
- 条件判断:用
ng-show根据row.entity.name的值切换控件显示,这里用严格相等===可以避免字符串和其他类型的匹配问题,更严谨 - ui-grid编辑指令:下拉框用
ui-grid-edit-dropdown,文本框用ui-grid-edit-input,这两个都是ui-grid内置的编辑指令,能确保编辑状态和单元格值同步正常工作 - 模型绑定:两个控件都绑定到
MODEL_COL_FIELD,这是ui-grid编辑模板的标准变量,专门用来同步单元格的数值 - 样式统一:给两个控件都加上
form-control类,和ui-grid默认编辑控件的样式保持一致,不会出现排版错乱
额外优化建议
如果后续需要支持多个特定的name值(比如不止some_name一个),可以把判断逻辑抽到控制器里,让模板更简洁易维护:
// 在你的控制器里添加这个方法 $scope.shouldShowDropdown = function(row) { // 可以在这里扩展需要显示下拉框的name列表 return ['some_name', 'another_special_name'].includes(row.entity.name); };
然后模板里的判断就可以改成:
<select ng-show="grid.appScope.shouldShowDropdown(row)" ...> <!-- 文本框的判断同理 --> <input ng-show="!grid.appScope.shouldShowDropdown(row)" ...>
这样以后要调整显示下拉框的条件,只需要修改控制器里的数组就行,不用动模板代码。
内容的提问来源于stack exchange,提问作者Leprosy




