解决elementUI列表的疑难杂症,排序显示错乱的问题

avatar
作者
筋斗云
阅读量:1
  大家好,在使用elementUI表格时,有时会出现一些意料之外的问题,比如数据排序正常但表格显示、排序错乱等。   在网上搜索后一般有2种解决方法:   1.给表格每一项的el-table-column添加唯一的id用于区分。   2.给表格每一项的el-table-column添加唯一的key用于区分。 
<el-table-column     prop="id"     label="序号"     min-width="50"     :key="10001"   ></el-table-column> <el-table-column prop="name" label="名称" min-width="80" :key="10002">    <template slot-scope="scope">       <div>         {{ scope.row.name || "—" }}       </div>    </template> </el-table-column> <el-table-column prop="number" label="数量" min-width="80" :key="10003">    <template slot-scope="scope">      <div>        {{ scope.row.number || 0 }}      </div>    </template> </el-table-column>    <el-table-column prop="percentage" label="百分比" min-width="80" :key="10002" id="percentage" :sort-method="(a,b)=>{return a.percentage - b.percentage}" sortable>       <template slot-scope="{}" slot="header">         <span>百分比</span>           <el-popover             popper-class="my-el-popover"             placement="right-start"             title=""             width="200"             trigger="hover"             content="这里是百分比"           >            <spanclass="tip-div" slot="reference">              <i class="el-icon-question tip-icon"></i>            </span>          </el-popover>        </template>        <template slot-scope="scope">          <div class="nowColor">            {{ scope.row.percentage }}%          </div>        </template>      </el-table-column>    
以上2种方法大多数时候可以奏效,一旦列表使用了复杂数据的排序,以上2种方法便会失效,比如百分比排序。 

查询elementUI官方文档发现,列表排序会使用elementUI默认的排序,可能与开发者想要的效果不一致。
解决方法是使用自定义的排序方法:sort-method
关键代码如下:
使用自定义排序方法 :sort-method=“(a,b)=>{return a.percentage - b.percentage}” sortable

<el-table-column prop="percentage" label="百分比" min-width="80" :key="10002" id="percentage" :sort-method="(a,b)=>{return a.percentage - b.percentage}" sortable></el-table-column>    

测试数据如下(可复制查看效果)

this.tableData = [{   id: 1,   name: "测试1号",   number: 19,   percentage: 52.01,   rank: 49,   rankRate: 81.29 }, {   id: 2,   name: "测试2号",   number: 11,   percentage: 42.01,   rank: 11,   rankRate: 42.01 }, {   id: 3,   name: "测试3号",   number: 1,   percentage: 2.01,   rank: 1,   rankRate: 2.01 }] 

效果图如下:
效果图示例
最后,原创不易,如本文对您有所帮助,麻烦一键三连点个赞谢谢!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!