循环读取CheckBoxList中勾选的值

    当勾选CheckBoxList值时,可以实现多选,那么如何获取勾选的值呢? 由于用selectItem.text只能得到最小的Index的值,所以不能直接获取。 

    方法:每次获得一个勾选的值之后,把Selected选项设置为false,这样,下一个勾选的数据就成了Index最低的选项,此时selectedtext为此项. 这样可以获取多个值。但是还是会有问题。先看代码:

string multValue()
{
        ArrayList parm 
= new ArrayList();
        
string listvalue = "";
        
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        
{
            
if (CheckBoxList1.Items[i].Selected == true)
            
{
                listvalue 
+= CheckBoxList1.SelectedItem.Text;
                CheckBoxList1.Items[i].Selected 
= false;
                listvalue 
+= ",";
            }

        }

        
return listvalue;
}

以上这段代码完全可以取出所有勾选值,放在一个以逗号分割的字符串里,但是,页面上所勾得选项已经失去了。因为我们每取一次值的时候,就将selected设置为false. 那么如何解决这个问题呢?

    方法:将所选值放入一个ArrayList里面,当取得所有值之后,在做一个循环恢复所选值。判断条件是将ArrayList里的选项和CheckBoxList的值比较,如何一样,就将selected设置为true. 另外为了解决数组不越界问题,一定要将ArrayList构造成和CheckBoxList中选项个数一样。以下是代码。

string Option()
{
        ArrayList parm 
= new ArrayList();
        
string listvalue = "";
        
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        
{
            
if (CheckBoxList1.Items[i].Selected == true)
            
{
                listvalue 
+= CheckBoxList1.SelectedItem.Text;
                parm.Add(CheckBoxList1.SelectedItem.Text);
                CheckBoxList1.Items[i].Selected 
= false;
                listvalue 
+= ",";
            }

            
else
            
{
                parm.Add(
"");
            }

        }

        
//恢复勾选值
        for (int i = 0; i < parm.Count; i++)
        
{
            
if (parm[i].ToString() == CheckBoxList1.Items[i].Text.ToString())
            
{
                CheckBoxList1.Items[i].Selected 
= true;
            }

        }

        
return listvalue;
}
<think>我们有一个需求:在Vue2中使用el-table,每次打开或关闭筛选框时,不缓存筛选列的复选框状态,仅保留实际被筛选数据的勾选状态。也就是说,每次打开筛选框时,未筛选的列(即未应用筛选的列)的复选框应该重置为未勾选状态,而已经应用了筛选的列则保持其勾选状态。 分析:el-table的筛选功能通常是通过在列上设置filters属性来定义可选的筛选项,然后通过filter-change事件来监听筛选变化。但是,默认情况下,当用户打开筛选面板时,它会显示上一次勾选的状态(包括未实际应用的临时勾选状态)。我们想要的效果是每次打开筛选面板时,只显示已经应用了的筛选条件(即实际筛选数据的勾选状态),而将未应用的筛选条件重置为未勾选。 然而,el-table本身并没有提供直接的方法来重置筛选面板的勾选状态。因此,我们需要采取一些额外的步骤。 思路: 1. 我们需要控制每个列的筛选条件。我们可以通过给每个列设置一个本地的筛选状态(例如,一个数组,记录当前列哪些选项被选中)。 2. 在每次打开筛选面板时,将未实际应用的筛选条件(即未提交的筛选条件)重置为无勾选状态,而已经应用的则保持不变。 3. 但是,注意el-table的筛选面板在打开时,其勾选状态是由column.filters数组中的每个选项的checked属性决定的。因此,我们可以在打开筛选面板之前,重置这些checked属性:将已经应用的筛选条件对应的选项设置为checked=true,其他设置为false。 然而,我们如何知道用户已经应用了哪些筛选条件呢?我们可以通过filter-change事件来记录每个列当前的应用状态。例如,我们可以用一个对象(如activeFilters)来记录每个列(通过column.property)当前选中的筛选。 步骤: 1. 在data中定义一个对象,用于存储当前每个列已经应用的筛选。例如: data() { return { activeFilters: {} // 键为列的prop,为一个数组(表示该列选中的筛选) }; } 2. 监听el-table的filter-change事件,当筛选条件改变时(用户点击了筛选面板的确定按钮),更新activeFilters。 handleFilterChange(filters) { // filters是一个对象,键为列的prop,为该列选中的筛选数组 this.activeFilters = { ...filters }; } 3. 关键点:在每次打开筛选面板之前(即点击表头的筛选图标时),我们需要重置列的filters数组中每个选项的checked状态。我们可以通过表头scoped slot来自定义表头,从而在点击筛选图标时触发一个方法。 - 在el-table-column中使用scoped slot自定义表头,这样我们可以在表头中添加自己的点击事件。 - 在自定义表头中,我们有一个参数{ column },通过column可以拿到该列的filters数组。 - 在点击筛选图标时,我们首先根据当前列在activeFilters中存储的已应用筛选来设置column.filters中每个选项的checked:如果该选项的在activeFilters中,则checked=true,否则false。 - 然后,我们手动调用el-table提供的方法来打开筛选面板(因为默认的点击事件被我们覆盖了,所以需要手动调用)。 4. 但是,注意:直接修改column.filters可能会引起问题,因为它是响应式的,而且我们可能需要深拷贝以避免影响其他列。另外,由于每次打开筛选面板时都需要重置,所以我们需要在打开前重置。 5. 另一种思路:每次打开筛选面板时,重新生成一个filters数组,只将已应用的选项设置为选中,其他不选中。然后通过Vue的响应式机制更新该列的filters。 6. 然而,el-table的列配置是响应式的,我们可以动态改变filters。因此,我们可以这样做: - 在data中存储每一列的原始filters(未设置checked状态的)。 - 在点击表头筛选按钮时,根据activeFilters中该列的已应用筛选,生成一个新的filters数组(每个选项是一个对象,包含text, value, 以及checked:如果该value在activeFilters中,则checked为true,否则为false)。 - 然后将该列的filters设置为这个新数组。 - 然后手动打开筛选面板。 7. 如何手动打开筛选面板?我们可以通过el-table的store状态来触发,但是官方没有提供直接的方法。我们可以使用一个自定义指令或者通过DOM操作触发?实际上,我们可以利用el-table的doLayout方法重新布局,但并不能直接打开筛选面板。 8. 另一种方法:我们可以使用el-table的ref,然后通过ref找到表头中的筛选按钮,并触发其点击事件?但是这样会再次触发我们的方法,导致循环。 9. 实际上,我们可以利用column的filteredValue属性。但是,我们这里需要的是在打开筛选面板时重置未提交的勾选状态,而提交后的状态由activeFilters记录。 10. 参考引用[3]中,他们封装了表头,我们可以借鉴其思路。在自定义表头中,我们监听点击筛选按钮的事件,然后先重置该列的filters,再使用一个自定义的弹出面板?这样工作量较大。 11. 实际上,element-ui的table组件提供了一个方法:toggleFilter,但是它是用于切换筛选面板的显示状态的。我们可以这样: - 在自定义表头中,我们添加一个点击事件,当点击筛选按钮时,执行: this.$nextTick(() => { // 先重置该列的filters this.resetColumnFilters(column); // 然后手动打开筛选面板 this.$refs.table.toggleFilter(column); }); 但是注意,toggleFilter方法在element-ui的文档中并没有公开,所以使用可能会有风险。 12. 考虑到稳定性,我们可能不得不使用另一种方法:在每次打开筛选面板后,通过DOM操作去修改复选框的选中状态?这不太优雅,而且容易出错。 13. 重新思考:我们是否可以在筛选面板打开的时候,动态改变filters数组,然后希望el-table能够重新渲染筛选面板?实际上,当我们改变column.filters后,筛选面板会重新渲染。因此,我们可以这样做: - 在自定义表头中,当用户点击筛选按钮时,我们首先根据activeFilters重置该列的filters(即设置每个选项的checked),然后通过一个标志位(比如设置一个变量表示需要打开筛选面板)来触发打开操作。但是,由于el-table没有提供打开筛选面板的方法,我们可以通过一个trick:在重置filters后,利用一个setTimeout,然后通过DOM操作触发筛选按钮的点击事件(这样不会触发我们自定义的点击事件,因为我们已经重置了filters,而且通过setTimeout避开了事件循环)。 14. 具体步骤: a. 在自定义表头中,我们给筛选按钮绑定一个点击事件(比如叫handleFilterClick),并阻止默认行为(因为我们要自己控制)。 b. 在handleFilterClick中,重置当前列的filters(根据activeFilters设置checked)。 c. 然后使用setTimeout,在下一个事件循环中,手动触发该列的表头单元格内的筛选按钮的点击事件(通过DOM操作,获取该列的表头中的筛选按钮,然后触发click事件)。这样,因为我们在重置filters之后才触发,所以打开的面板会显示重置后的状态。 15. 自定义表头示例: <el-table-column prop="name" label="姓名"> <template slot="header" slot-scope="{ column }"> <span>姓名</span> <i class="el-icon-s-operation" @click="handleFilterClick(column)"></i> </template> </el-table-column> 注意:这里我们替换了默认的表头,所以需要自己写表头内容和筛选图标。 16. 但是,这样我们就需要自己写每个列的表头,比较麻烦。有没有办法全局覆盖?我们可以使用一个mixin或者一个全局的table header组件? 17. 考虑到每个列都需要,我们可以封装一个自定义表头的组件,然后通过循环生成列时使用。 18. 另外,我们也可以监听el-table的header-click事件,但是header-click事件并不能区分点击的是哪个图标(排序、筛选等),所以不太合适。 19. 考虑到复杂度,我们采用自定义表头的方式。 具体实现步骤: 步骤1:在data中存储activeFilters和每个列的原始filters(注意,原始filters是不带checked状态的,就是定义的可选筛选数组)。 步骤2:在mounted中,保存原始filters。我们可以遍历表格的列,将每列的prop和原始filters存储在一个对象中(注意,列可能是动态的,所以需要在表格数据加载后获取列)。 但是,我们也可以直接在定义列的时候,将原始filters保存在data中。例如: columns: [ { prop: 'name', label: '姓名', filters: [{ text: '张三', value: '张三' }, ...], originFilters: null } ] 然后在创建列的时候,将originFilters设置为原始filters(不带checked的数组)。注意,originFilters不需要响应式,因为我们在重置时只需要读取。 或者,我们可以在data中存储一个原始filters的副本,例如originFiltersMap,键为prop,为原始filters数组。 步骤3:自定义表头,在点击筛选图标时: handleFilterClick(column) { // 1. 根据当前列prop,从activeFilters中取出该列已应用的筛选(数组) const appliedFilters = this.activeFilters[column.property] || []; // 2. 从originFiltersMap中获取该列的原始filters数组(不带checked的) const originFilters = this.originFiltersMap[column.property]; // 3. 生成新的filters数组,设置checked const newFilters = originFilters.map(filter => { return { ...filter, checked: appliedFilters.includes(filter.value) }; }); // 4. 将column.filters设置为newFilters // 注意:直接修改column可能会触发响应式更新,但el-table内部会监听filters变化 column.filters = newFilters; // 5. 在下一个事件循环中,手动触发该列表头中默认的筛选按钮的点击事件,以打开筛选面板 this.$nextTick(() => { // 这里我们需要找到该列表头中的筛选按钮 // 我们可以给表格设置ref,然后通过ref找到表头单元格,再找到筛选按钮 // 注意:一个表格有多个列,我们需要根据列prop来找到对应的表头单元格 // 由于表头单元格没有直接标识,我们可以通过列id(column.id)来查找?element-ui的列会生成一个id,存储在column.id // 表头单元格的类名可能是:'el-table__column-' + column.id const headerCell = document.querySelector(`.el-table__column-${column.id} .el-table__column-filter-trigger`); if (headerCell) { headerCell.click(); } }); } 步骤4:在filter-change事件中更新activeFilters。 步骤5:在表格初始化的时候,我们需要将每列的原始filters保存到originFiltersMap中。可以在mounted中,遍历this.$refs.table.columns(注意,this.$refs.table是el-table实例,其columns属性是内部列对象数组),但是注意,我们定义列的时候,每个列都有prop和filters,所以我们可以: this.$nextTick(() => { const table = this.$refs.table; table.columns.forEach(column => { if (column.property && column.filters) { // 保存原始filters,注意这里我们深拷贝一下,避免后续被修改 this.originFiltersMap[column.property] = JSON.parse(JSON.stringify(column.filters)); } }); }); 但是,注意:如果列是动态生成的,可能需要在数据加载后执行。 步骤6:在表格列变化时(比如动态列),需要重新保存originFiltersMap。 注意:这种方法需要自定义每个列的表头,所以我们在定义列的时候,需要为每个列都提供header scoped slot。我们可以写一个公共的header组件,但这里为了简化,我们在每个列中写。 示例代码结构: 模板部分: <el-table ref="table" :data="tableData" @filter-change="handleFilterChange"> <el-table-column v-for="col in columns" :key="col.prop" :prop="col.prop" :label="col.label" :filters="col.filters"> <template slot="header" slot-scope="{ column }"> <span>{{ col.label }}</span> <i class="el-icon-s-operation" @click="handleFilterClick(column)"></i> </template> </el-table-column> </el-table> 脚本部分: data() { return { activeFilters: {}, originFiltersMap: {}, columns: [ { prop: 'name', label: '姓名', filters: [{ text: '张三', value: '张三' }, { text: '李四', value: '李四' }] }, // ... 其他列 ], tableData: [ ... ] }; }, mounted() { this.saveOriginFilters(); }, methods: { saveOriginFilters() { this.$nextTick(() => { const table = this.$refs.table; table.columns.forEach(column => { if (column.property && column.filters) { this.$set(this.originFiltersMap, column.property, JSON.parse(JSON.stringify(column.filters))); } }); }); }, handleFilterChange(filters) { // 更新activeFilters this.activeFilters = { ...filters }; }, handleFilterClick(column) { // 重置该列的filters const appliedFilters = this.activeFilters[column.property] || []; const originFilters = this.originFiltersMap[column.property]; if (originFilters) { const newFilters = originFilters.map(filter => { return { ...filter, checked: appliedFilters.includes(filter.value) }; }); column.filters = newFilters; } // 触发默认的筛选按钮点击事件 this.$nextTick(() => { // 使用列id来定位表头单元格 const headerCell = document.querySelector(`.el-table__column-${column.id} .el-table__column-filter-trigger`); if (headerCell) { headerCell.click(); } else { // 如果找不到,可能是列id变化了,我们可以尝试通过label或prop来查找?但比较复杂 // 或者,我们可以给每个表头单元格的筛选按钮添加一个自定义属性,比如:data-prop="column.property",然后通过属性选择器查找 // 但是,我们之前没有添加,所以这里需要改进:在自定义表头中,我们给筛选按钮添加一个data-prop属性 // 不过,我们这里已经使用了column.id,它是element-ui内部生成的,应该稳定。如果不行,我们可以考虑在header模板中给筛选按钮加上一个ref,但是ref是动态的,多个列会重复。 } }); } } 注意:这种方法覆盖了默认的表头渲染,所以我们需要自己添加排序图标等?因为我们只添加了筛选图标。如果需要排序功能,我们还需要在自定义表头中添加排序图标和事件。 因此,如果表格需要排序功能,我们需要在自定义表头中同时处理排序和筛选。这会使自定义表头变得复杂。 考虑到复杂性和维护性,如果项目中有多个表格需要此功能,建议封装一个自定义表头组件。 另外,由于我们手动触发了筛选按钮的点击事件,而el-table内部会再次打开/关闭筛选面板,所以可能会造成状态切换。因为点击筛选按钮时,默认行为是切换面板的显示和隐藏。而我们重置后,又触发了一次点击,所以会打开面板(如果原来是关闭的)或关闭面板(如果原来是打开的)。因此,我们需要确保在打开面板前,面板是关闭的。但是,我们无法直接知道面板当前的状态。 因此,我们可能需要控制面板的显示状态,确保在重置后打开面板。我们可以通过一个变量记录每个列的面板是否打开,但这样又增加了复杂度。 另一种思路:我们不要阻止默认的点击事件,而是在点击事件发生后(面板打开后)再重置面板内的复选框状态。我们可以监听面板的显示事件,然后通过DOM操作修改复选框状态。但是,面板是动态生成的,而且每个列的面板独立。 具体做法: 1. 不自定义表头,而是使用默认表头。 2. 监听el-table的header-click事件,在事件中判断点击的是否是筛选按钮(通过类名判断)。 3. 如果是筛选按钮,则记录当前点击的列,然后使用一个定时器(或者MutationObserver)来监测筛选面板的出现,然后修改面板内的复选框状态。 示例: <el-table ref="table" :data="tableData" @filter-change="handleFilterChange" @header-click="handleHeaderClick"> methods: { handleHeaderClick(column, event) { // 检查事件目标是否是筛选按钮 if (event.target.classList.contains('el-table__column-filter-trigger')) { // 记录当前点击的列 this.currentFilterColumn = column; } } } 然后,我们可以监听筛选面板的出现,比如使用MutationObserver,或者使用setInterval检查面板是否出现。当面板出现后,根据activeFilters重置该列面板内的复选框状态。 但是,这种方法需要操作DOM,而且需要处理异步,比较麻烦。 考虑到时间,我们采用自定义表头的方式,并且假设不需要排序图标(或者可以自己加上排序功能)。如果同时需要排序,我们可以在自定义表头中同时渲染排序图标和事件。 总结:我们使用自定义表头,在点击筛选图标时重置该列的filters(设置checked),然后手动触发默认的筛选按钮的点击事件来打开面板。这样,面板中显示的就是重置后的状态(已应用的为选中,未应用的为未选中)。 注意:由于我们手动触发了点击事件,所以会切换面板的显示状态。因此,如果面板原本是打开的,我们重置后再次触发点击,就会关闭面板。所以,我们需要确保在重置前面板是关闭的。但是,我们无法直接知道面板的状态。因此,我们可以在每次打开面板之前先关闭所有面板?element-ui的table同时只能打开一个面板(筛选面板或者排序面板),所以我们可以先关闭其他面板。 实际上,element-ui内部有一个方法closeFilterPanel,我们可以尝试调用: this.$refs.table.closeFilterPanel(); 但是,这个方法在文档中没有,是内部方法。我们可以尝试: this.$refs.table.store.commit('closeFilterPanel'); 但是,这依赖于内部实现,不稳定。 因此,我们假设在点击筛选图标时,面板是关闭的(因为用户点击图标就是为了打开面板)。所以,我们重置后触发一次点击,就会打开面板。如果用户连续点击两次,第一次点击(面板打开)后,第二次点击时,我们重置后触发点击,就会关闭面板。这样符合预期。 所以,我们不需要额外处理面板的开关状态。 最后,注意:如果列没有设置filters,那么就不需要显示筛选图标,所以我们在自定义表头中也要根据条件显示图标。 完整示例代码: 由于篇幅,这里只给出关键代码。 注意:此方案需要谨慎测试,因为涉及element-ui内部实现和DOM操作。 另外,如果element-ui版本升级,内部类名或结构改变,可能会失效。 因此,我们也可以考虑使用另一种更简单的方法:在每次筛选面板打开时,通过Vue的nextTick,在面板渲染后,立即通过DOM操作将未应用的复选框取消选中。但是,这样需要知道哪些是未应用的,而且操作DOM的时机需要准确。 这里我们给出一个不自定义表头,而是通过header-click和DOM操作的方法(作为备选): 步骤: 1. 监听header-click事件,当点击的是筛选按钮时,记录当前列,并设置一个标志(如waitingForPanel=true)。 2. 在nextTick中,使用MutationObserver或setTimeout(例如100毫秒)去等待面板出现。 3. 面板出现后,根据activeFilters中该列的已应用筛选,设置面板中每个复选框的选中状态。 示例代码: methods: { handleHeaderClick(column, event) { if (event.target.classList.contains('el-table__column-filter-trigger')) { this.currentFilterColumn = column; this.waitingForPanel = true; // 设置一个定时器,检查面板是否出现 setTimeout(() => { if (this.waitingForPanel) { // 查找面板 const panel = document.querySelector('.el-table-filter'); if (panel && panel.style.display !== 'none') { // 找到该列对应的面板,我们根据列prop来匹配?面板的每个复选框的value // 面板中的复选框:.el-checkbox // 注意:同一个时刻只有一个面板 const appliedFilters = this.activeFilters[column.property] || []; // 遍历面板中的所有复选框 const checkboxes = panel.querySelectorAll('.el-checkbox'); checkboxes.forEach(checkbox => { // 每个复选框的input隐藏,我们通过其value属性 const input = checkbox.querySelector('input[type="checkbox"]'); const value = input.value; // 如果该value在appliedFilters中,则应该选中,否则不选中 if (appliedFilters.includes(value)) { input.checked = true; } else { input.checked = false; } // 注意:element-ui的复选框是使用el-checkbox组件,我们直接修改input的checked并不能触发组件的状态更新,所以需要触发change事件? // 但是,我们只是要显示的状态,用户点击确定时会提交,而且我们并不想在这里触发change事件,因为这只是重置显示。 // 另外,我们也可以修改el-checkbox的类名,但是这样很麻烦。 // 所以,我们这里只是修改input的checked,而el-checkbox的显示状态是通过类名控制的,它监听了input的change事件。 // 因此,我们需要触发input的change事件,让el-checkbox更新类名。 input.dispatchEvent(new Event('change')); }); this.waitingForPanel = false; } } }, 100); } } } 但是,这种方法有延迟,而且操作DOM,且依赖于el-table-filter的面板类名和内部结构,稳定性较差。 综上所述,我们优先推荐自定义表头的方法。 由于用户的具体需求和环境可能不同,请根据实际情况选择方案。 最后,我们给出自定义表头方案的完整代码示例(简化版):</think>在 Vue2 中使用 Element UI 的 el-table 实现每次打开筛选框时重置未筛选项的状态,可通过以下方案实现。核心思路是:**动态控制筛选列表,在打开筛选框时重置未提交的筛选状态,仅保留已应用的筛选条件**。 ### 解决方案 通过以下步骤实现需求: 1. **存储原始筛选列表**:保存初始未设置 `checked` 状态的筛选列表 2. **监听筛选框打开事件**:在筛选框打开时重置未提交的选项 3. **动态更新筛选列表**:根据已应用的筛选条件生成带 `checked` 状态的新列表 4. **处理筛选变化**:在确认筛选时更新应用状态 ```vue <template> <el-table ref="myTable" :data="tableData" @filter-change="handleFilterChange"> <el-table-column prop="status" label="状态" column-key="status" :filters="statusFilters" // 使用动态生成的筛选列表 filter-placement="bottom-end"> <template slot="header" slot-scope="{ column }"> <span>状态</span> <i class="el-icon-s-open" @click="resetFilter(column)" // 点击图标时重置未提交状态 style="margin-left:5px;cursor:pointer"/> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [/* 表格数据 */], // 原始筛选列表(无checked状态) originFilters: [ { text: '进行中', value: 'processing' }, { text: '已完成', value: 'success' }, { text: '已取消', value: 'canceled' } ], // 动态筛选列表(带checked状态) statusFilters: [], // 当前应用的筛选 appliedFilters: [] } }, mounted() { // 初始化筛选列表 this.resetFilter(); }, methods: { // 重置未提交的筛选状态 resetFilter(column) { // 生成新列表:已应用的选项标记为checked,其他重置 this.statusFilters = this.originFilters.map(f => ({ ...f, checked: this.appliedFilters.includes(f.value) })); // 手动打开筛选面板 this.$nextTick(() => { if (column && this.$refs.myTable) { this.$refs.myTable.store.commit('toggleFilterPanel', column.id); } }); }, // 处理筛选变化(用户点击确认时) handleFilterChange(filters) { // 更新已应用的筛选 this.appliedFilters = filters.status || []; } } } </script> ``` ### 关键实现说明 1. **状态分离管理**: - `originFilters`:存储原始筛选选项(无状态) - `statusFilters`:动态生成的带 `checked` 状态的筛选列表 - `appliedFilters`:记录当前已应用的筛选 2. **重置机制**: - 点击表头筛选图标时触发 `resetFilter` - 根据 `appliedFilters` 生成新列表:已应用的选项保持 `checked: true`,其余重置为未选中 - 使用 `$nextTick` 确保 DOM 更新后打开筛选面板 3. **筛选状态同步**: - `filter-change` 事件捕获用户确认的筛选 - 更新 `appliedFilters` 保证下次打开时正确显示已应用状态 ### 效果对比 | **场景** | 默认行为 | 本方案行为 | |------------------|----------------------------------|-----------------------------------| | 打开筛选框时 | 显示上次操作的所有勾选项 | 仅显示已应用的勾选项 | | 未确认的筛选操作 | 被缓存 | 自动重置 | | 已应用的筛选 | 保持勾选 | 保持勾选 | ### 注意事项 1. **动态列处理**:若表格列动态生成,需在列数据变化时更新 `originFilters` 2. **多列筛选**:为每列单独存储 `originFilters` 和 `appliedFilters` 3. **面板触发**:`toggleFilterPanel` 是 Element UI 内部 API,在版本升级时需测试兼容性 4. **自定义表头**:必须使用 `scoped slot` 自定义表头添加点击事件 此方案通过分离筛选状态与应用状态,实现了打开筛选框时自动重置未提交选项的需求,同时保持已应用筛选的稳定性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值