Jes*_*Del 2 sorting vue.js vue-component vuejs2
我正在尝试按列对表格进行排序。当按下 ID 按钮时,所有列都会从最高到最低排序,反之亦然,按下其他两个按钮也是如此。我该怎么做?
\n\n<table id="mi-tabla">\r\n <thead>\r\n <tr class="encabezado-derecha" >\r\n <th>ID</th>\r\n <th>Nombre de secci\xc3\xb3n</th>\r\n <th>Potencial (\xe2\x82\xac)</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr class="item" v-for="user in userInfo" @click="openDiv(), showInfo1(user.id_section)">\r\n <td>{{user.id_section}}</td>\r\n <td>{{user.desc_section}}</td>\r\n <div class="acceder">\r\n <td>{{user.sale_potential | currency}}</td>\r\n <img src="../../iconos/icon/chevron/right@3x.svg" alt />\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>
Run Code Online (Sandbox Code Playgroud)\r\n{\r\n "id_store": 4,\r\n "id_section": 1,\r\n "desc_section": "MATERIALES DE CONSTRUCCION yeh",\r\n "id_rule": 1,\r\n "sale_potential": "69413.5525190617"\r\n },\r\n {\r\n "id_store": 4,\r\n "id_section": 2,\r\n "desc_section": "CARPINTERIA Y MADERA",\r\n "id_rule": 1,\r\n "sale_potential": "74704.3439572555"\r\n },\r\n {\r\n "id_store": 4,\r\n "id_section": 3,\r\n "desc_section": "ELECTR-FONTAN-CALOR",\r\n "id_rule": 1,\r\n "sale_potential": "101255.89182774"\r\n }\r\n ]
Run Code Online (Sandbox Code Playgroud)\r\n如果您想自己实现,它可能看起来像这样,请注意,这是非常基本的功能,当您开始添加其他功能时,您可能会发现使用已经完成这一切的组件会带来更多好处。
\n\n无论如何,您可以做到这一点的方法是使用计算(sortedList
)来存储数组的排序版本。然后使用另一个数据变量来存储要存储的列 ( sortBy
),并且可以选择存储排序方向 (sortOrder
)
然后添加一个sort
传递排序键并更新sortBy
值和/或sortOrder
. 当这些值(甚至源数组)中的任何一个发生更改时,计算将使用排序函数对数组重新排序。
new Vue({\r\n el: "#app",\r\n data: {\r\n \tsortBy: "id_section",\r\n sortOrder: 1,\r\n userInfo: [\r\n {\r\n "id_store": 4,\r\n "id_section": 1,\r\n "desc_section": "MATERIALES DE CONSTRUCCION yeh",\r\n "id_rule": 1,\r\n "sale_potential": "69413.5525190617"\r\n },\r\n {\r\n "id_store": 4,\r\n "id_section": 2,\r\n "desc_section": "CARPINTERIA Y MADERA",\r\n "id_rule": 1,\r\n "sale_potential": "74704.3439572555"\r\n },\r\n {\r\n "id_store": 4,\r\n "id_section": 3,\r\n "desc_section": "ELECTR-FONTAN-CALOR",\r\n "id_rule": 1,\r\n "sale_potential": "101255.89182774"\r\n }\r\n ]\r\n },\r\n computed: {\r\n sortedList() {\r\n return [...this.userInfo]\r\n .map(i => ({...i, sale_potential:parseFloat(i.sale_potential)}))\r\n .sort((a,b) => {\r\n \t if (a[this.sortBy] >= b[this.sortBy]) {\r\n \treturn this.sortOrder\r\n }\r\n return -this.sortOrder\r\n })\r\n }\r\n },\r\n methods: {\r\n \tsort: function(sortBy){\r\n \tif(this.sortBy === sortBy) {\r\n \tthis.sortOrder = -this.sortOrder;\r\n } else {\r\n \tthis.sortBy = sortBy\r\n }\r\n }\r\n }\r\n})
Run Code Online (Sandbox Code Playgroud)\r\n<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>\r\n<div id="app">\r\n [{{sortBy}}] [{{sortOrder}}]\r\n <table id="mi-tabla">\r\n <thead>\r\n <tr class="encabezado-derecha">\r\n <th @click=\'sort("id_section")\'>{{ sortBy === \'id_section\' ? \'*\' : \'\' }}ID</th>\r\n <th @click=\'sort("desc_section")\'>{{ sortBy === \'desc_section\' ? \'*\' : \'\' }}Nombre de secci\xc3\xb3n</th>\r\n <th @click=\'sort("sale_potential")\'>{{ sortBy === \'sale_potential\' ? \'*\' : \'\' }}Potencial (\xe2\x82\xac)</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr class="item" v-for="user in sortedList">\r\n <td>{{user.id_section}}</td>\r\n <td>{{user.desc_section}}</td>\r\n <div class="acceder">\r\n <td>{{user.sale_potential | currency}}</td>\r\n <img src="../../iconos/icon/chevron/right@3x.svg" alt />\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>
Run Code Online (Sandbox Code Playgroud)\r\n 归档时间: |
|
查看次数: |
3799 次 |
最近记录: |