写此文的缘由:现如今,网络上,没有同下的解释形式(或者在外网,所以我没找到,或者大佬觉得太简单所以不屑解释)。然而,我认为这是对VUE+ElementUI的底层框架的理解深入化问题。(为什么要深入理解底层,来自学习java时留下的习惯,挖底层代码是常态)
在API文档中:
<el-button @click="clearFilter">清除所有过滤器</el-button> <el-table ref="filterTable" :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" sortable width="180" column-key="date" :filters="[{text: ''2016-05-01'', value: ''2016-05-01''}, {text: ''2016-05-02'', value: ''2016-05-02''}, {text: ''2016-05-03'', value: ''2016-05-03''}, {text: ''2016-05-04'', value: ''2016-05-04''}]" :filter-method="filterHandler" > </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"> </el-table-column> <el-table-column label="日期" width="120"> <template slot-scope="scope">{{ scope.row.date }}</template> </el-table-column>
如果要同时使用取消选择和清空所有过滤器的话,按照API的例子,这里的ref是定义了不同的名字。
那么我遇到的问题,错误的认为,ref=“***”这里对应的是不同key值对应的不同value;
实际上:不论这的ref=“**”,ref等于任何一个字符串,只是将ref这个{key,value}中的key赋值,不论key赋给什么值,都会指向定位到唯一的value;
从实际例子上看:
api代码中:
toggleSelection(rows) { if (rows) { rows.forEach(row => { this.$refs.multipleTable.toggleRowSelection(row); }); } else { this.$refs.multipleTable.clearSelection(); } }
多选的取消选择定义的ref的key名叫multipleTable,而筛选里:
clearFilter() { this.$refs.filterTable.clearFilter(); }
取名叫filterTable,这里只是取名问题,取key值名叫什么什么的情况,其对应的value的属性是不变的;
所以,可以写成以下这种情况:
<el-table :data="tableData" stripe border ref="multipleTable" tooltip-effect="dark" style="width: 100%" height="420" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"> </el-table-column>...... toggleSelection (rows) { if (rows) { rows.forEach(row => { this.$refs.multipleTable.toggleRowSelection(row) }) } else { this.$refs.multipleTable.clearSelection() } }, handleSelectionChange (val) { this.multipleSelection = val }, clearFilter () { // 清空全部筛选 this.$refs.multipleTable.clearFilter() }
附上底层vue代码:
export interface Vue { readonly $el: Element; readonly $options: ComponentOptions<Vue>; readonly $parent: Vue; readonly $root: Vue; readonly $children: Vue[]; readonly $refs: { [key: string]: Vue | Element | Vue[] | Element[] }; readonly $slots: { [key: string]: VNode[] | undefined }; readonly $scopedSlots: { [key: string]: NormalizedScopedSlot | undefined }; readonly $isServer: boolean; readonly $data: Record<string, any>; readonly $props: Record<string, any>; readonly $ssrContext: any; readonly $vnode: VNode; readonly $attrs: Record<string, string>; readonly $listeners: Record<string, Function | Function[]>;......
联系客服