关于这个排序失效问题的核心点,跟这个有关系:[nzFrontPagination]="false"

关于分页组件失效的问题,是你获取数据以后,需要给页码,页数,总条数都要重新赋值,这个真的是好无语

要考虑清楚,你是前端分页还是后端分页,如果是前端分页,代码可以参考官方zorro文档,里边很多,如果你是后端分页,那么可以参考下面的DEMO

首先新建 一个组件,在路由里和模块里都注册一下,注册路由你自己根据需求来,

  • 备注:如果不注册到当前模块,某些zorro的组件是无法使用的,会报错,这个是angular11版本和其他版本的不同之处。。。不再赘述了

来,上DEMO

html

<p>my-test01 works!</p>
<div class="bottom_table">
<nz-table #filterTable [nzData]="listOfData" nzTableLayout="fixed" [nzShowPagination]="false"
[nzFrontPagination]="false" [nzScroll]="{ x: '1200px', y: '570px' }">
<thead>
<tr>
<th *ngFor="let column of listOfColumns" [nzSortFn]="column.sortFn" [nzWidth]="column.w"
(nzSortOrderChange)="sortChange($event,column.key)">
{{ column.name }}
</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of filterTable.data">
<td>{{ data.item01 }}</td>
<td>{{ data.item02 }}</td>
<td>{{ data.item03 }}</td>
<td>{{ data.item04 }}</td>
<td>{{ data.item05 }}</td>
<td>{{ data.item06 }}</td>
</tr>
</tbody>
</nz-table>
<div class="my_page">
<div class="pagination_css">
<ng-template #totalTemplate let-total>共{{ total }}條</ng-template>
<nz-pagination [(nzPageSize)]="page.pageSize" [(nzPageIndex)]="page.current" [nzTotal]="page.total"
[nzSize]="'small'" nzShowSizeChanger
nzShowQuickJumper [nzShowTotal]="totalTemplate" (nzPageIndexChange)="currentChange($event)"
(nzPageSizeChange)="pageSizeChange($event)"></nz-pagination>
</div>
</div>
</div>

ts

import { Component, OnInit } from '@angular/core';
import { NzMessageService } from 'ng-zorro-antd/message';
import { _HttpClient } from '@delon/theme';
interface DataItem {
item01: number;
item02: number;
item03: string;
item04: string;
item05: string;
item06: string;
}
interface ColumnItem {
name: string;
w: string;
key: string,
sortFn: boolean,
}
@Component({
selector: 'app-my-test01',
templateUrl: './my-test01.component.html',
styleUrls: ['./my-test01.component.less']
}) export class MyTest01Component implements OnInit { constructor( private msgSrv: NzMessageService,
public http: _HttpClient,
) { } ngOnInit(): void {
this.setData()
} // 分頁代碼
page = {
current: 1,
total: 0,
pageSize: 10 }
totalTemplate = true
// 分頁代碼
// 表格代碼----start
listOfColumns: ColumnItem[] = [
{
name: '序號',
key: 'item01',
sortFn: false,
w: '4%',
},
{
name: '第二列',
key: 'item02',
sortFn: true,
w: '4%',
},
{
name: '第三列',
key: 'item03',
sortFn: true,
w: '5%',
},
{
name: '第四列',
key: 'item04',
sortFn: true,
w: '4%',
},
{
name: '第五列',
key: 'item05',
sortFn: true,
w: '4%',
},
{
name: '第六列',
key: 'item06',
sortFn: true,
w: '12%',
},
];
listOfData: DataItem[] = [
{
item01: 1,
item02: 0.01,
item03: '1',
item04: '1',
item05: '1',
item06: '1',
}, ];
setData() {
this.listOfData = new Array(500).fill({}).map((_, i) => {
return {
item01: i + 1,
item02: 0.01 * (i + 1),
item03: i + 10 + '數據',
item04: i + 100 + '數據',
item05: i + 1000 + '數據',
item06: i + 10000 + '數據',
}
})
this.page.total = this.listOfData.length
}
sortChange(e, name) {
console.log(e, name)
this.listOfData = e === 'ascend' ? this.listOfData.sort(
(a, b) => (typeof (a[name]) === 'string') ? a[name].localeCompare(b[name]) : a[name] - b[name]) : this.listOfData.sort(
(a, b) => (typeof (a[name]) === 'string') ? b[name].localeCompare(a[name]) : b[name] - a[name]
)
}
currentChange(e) {
this.page.current = e
console.log('頁碼this.page.current:', this.page.current)
const params = {
cur_page: this.page.current,
page_size: this.page.pageSize,
}
this.getTable(params)
}
pageSizeChange(e) {
this.page.pageSize = e
console.log('頁碼this.page.pageSize:', this.page.pageSize)
const params = {
cur_page: 1,
page_size: this.page.pageSize,
}
this.getTable(params)
}
baseUrl = ''
async getTable(params) {
// const res4: any = await this.myHttpRes('post', this.baseUrl + '/testData', params, false);
// if (res4 && res4.success) {
// this.msgSrv.success(res4.msg ? res4.msg : 'Get Data Success!')
// this.listOfData = res4.data.tableData
// this.page.total = res4.data.total
// console.log(this.listOfData)
// } else {
// this.msgSrv.error(res4 && res4.msg ? res4.msg : 'Get Table Data Fail!')
// } // 模擬數據
console.log('第几頁:',params.cur_page)
console.log('每頁條數:',params.page_size)
let newArr = []
newArr = new Array(params.page_size).fill({}).map((_, i) => _ = {
item01: i + 1 + (params.cur_page - 1) * 10,
item02: 0.01 * (i + 1),
item03: i + 10 + '數據',
item04: i + 100 + '數據',
item05: i + 1000 + '數據',
item06: i + 10000 + '數據',
})
this.listOfData = newArr
this.page.current = params.cur_page // 解決奇葩的問題
this.page.pageSize = params.page_size // 解決奇葩的問題
this.page.total = 500
} // 下面都是工具函數-----------分割線----------------------分割線----------- async myHttpRes(method: string, url: string, formData: object = {}, needMsg, msgScu = 'Success!', msgErr = 'Network Error!'): Promise<Node[]> {
return new Promise<Node[]>((resolve: any, reject: any) => {
// this.http[method](url, formData).pipe(timeout(12000)).subscribe(
this.http[method](url, formData).subscribe(
{
next: (res: any) => {
if (res && (['success', 'OK'].indexOf(res.status) !== -1 || res.success || [0].indexOf(res.errorNum) !== -1 || ['1', '0', '000000', '001', '002'].indexOf(res.code) !== -1)) {
needMsg && this.msgSrv.success(res.message || msgScu)
resolve(res)
// resolve(res)
} else {
needMsg && this.myAlert(res.message || msgErr)
// 操作失敗,請檢查網絡重試...
reject(new Error(res.message || msgErr))
}
},
error: (err: any) => {
// console.log('走這裡了123',err)
needMsg && this.myAlert(msgErr)
reject(new Error(err.message || 'Error'))
}
})
})
}
// 因需求增加提示框,樣式需要增加到容易修改的地方
myAlert(name) {
var myAlertBigBoxIsTrue = document.getElementById('myMLBAlertBigBox');
// console.log(myAlertBigBoxIsTrue);
if (myAlertBigBoxIsTrue === null) { // 創建一個遮罩層
var bigbox = document.createElement("div");
bigbox.id = "myMLBAlertBigBox";
//创建一个大盒子
var box = document.createElement("div");
var myspan = document.createElement('span');
//创建一个关闭按钮
var button = document.createElement("button"); bigbox.appendChild(box);
// 設置遮罩層的樣式
var bigboxName = {
"width": "100%",
"height": "100vh",
"background-color": "rgba(0,0,0,0.4)",
"position": "fixed",
"top": "0",
"left": "0",
"z-index": "1000",
"text-align": "center"
}
//给元素添加元素
for (var k in bigboxName) {
bigbox.style[k] = bigboxName[k];
}
//定义一个对象保存样式
var boxName = {
width: "500px",
height: "180px",
backgroundColor: "white",
border: "1px solid rgb(226,222,222)",
position: "absolute",
"box-shadow": "5px 5px 10px 2px rgba(0,0,0,0.4)",
top: "20%",
"border-radius": "5px",
left: "50%",
margin: "-90px 0 0 -250px",
zIndex: "1001",
textAlign: "center",
lineHeight: "180px"
}
//给元素添加元素
for (var k in boxName) {
box.style[k] = boxName[k];
}
//把创建的元素添加到body中
document.body.appendChild(bigbox);
//把alert传入的内容添加到box中
if (arguments[0]) {
// box.innerHTML = arguments[0];
myspan.innerHTML = arguments[0];
}
// 定義span樣式
var spanName = {
"text-align": "left",
"line-height": "30px",
"border-radius": "5px",
"outline": "none",
"word-break": "break-all",
"position": "absolute",
"overflow-y": "auto",
"overflow": "auto",
"height": "112px",
"top": "20px",
"right": "25px",
"left": "25px", }
for (var j in spanName) {
myspan.style[j] = spanName[j];
} // bigbox.appendChild(box);
box.appendChild(myspan);
button.innerHTML = '關閉'// 改為I18N
// button.innerHTML = this.fanyi('button.close');
//定义按钮样式
var btnName = {
border: "1px solid #ccc",
backgroundColor: "#fff",
width: "70px",
height: "30px",
textAlign: "center",
lineHeight: "27px",
"border-radius": "5px",
outline: "none",
position: "absolute",
bottom: "10px",
right: "20px", }
for (var j in btnName) {
button.style[j] = btnName[j];
}
//把按钮添加到box中
box.appendChild(button);
//给按钮添加单击事件
button.addEventListener("click", function () {
bigbox.style.display = "none";
var idObject = document.getElementById('myMLBAlertBigBox');
if (idObject != null)
idObject.parentNode.removeChild(idObject);
})
} else {
return;
}
}
// 因需求增加提示框,樣式需要增加到容易修改的地方
}

解决angular11+zorro使用table组件排序失效以及分页组件失效问题,附完整DEMO代码的更多相关文章

  1. DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter

    drf偏移分页组件 paginations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...

  2. 自己动手写中文分词解析器完整教程,并对出现的问题进行探讨和解决(附完整c#代码和相关dll文件、txt文件下载)

    中文分词插件很多,当然都有各自的优缺点,近日刚接触自然语言处理这方面的,初步体验中文分词. 首先感谢harry.guo楼主提供的学习资源,博文链接http://www.cnblogs.com/harr ...

  3. Angular4.+ ngx-bootstrap Pagination 自定义分页组件

    Angular4 随笔(二)  ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...

  4. Python分页组件

    分页组件的实现: class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  5. 手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...

  6. asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题

    刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...

  7. 把iview中的table组件写成了一个公用组件,在另一个组件里去引用它的时候rander函数里的this指向不正确

    在vue项目里使用iview制作后台管理系统时,由于有多个页面都需要用到table组件,所以就把table写到了一个公共组件里,在其他页面去引用它,但是这时会发现一个问题,就是render函数里的th ...

  8. 解决mysql出现“the table is full”的问题

    解决mysql出现“the table is full”的问题 2010-12-20 09:15:17 分类: LINUX 今天中午收到mysql错误日志监控发来的警报,错误日志如下: 101209 ...

  9. jqueryUI中datepicker的使用,解决与asp.net中的UpdatePanel联合使用时的失效问题

    1.jqueryUI的datepicker的使用 -->首先在jqueryUI官网上根据你的需要下载适合你系统主题的样式,jqueryUI主题下载地址: -->下载后的文件 jquery- ...

  10. Lua table.sort排序

    在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序. 例如 local t = { {time = , i = }, {time = , i ...

随机推荐

  1. day53-马踏棋盘

    马踏棋盘 1.算法优化的意义 算法是程序的灵魂,为什么有些程序可以在海量数据计算时,依旧保持高速计算? 编程中算法很多,比如八大排序算法(冒泡.选择.插入.快排.归并.希尔.基数.堆排序).查找算法. ...

  2. debian如何删除无效的应用图标

    1.看/usr/share/applications下是否有xxx.desktop 2.可以到-/.local/share/applications下看是否有xxx.desktop 来源:https: ...

  3. python中的字符串学习

    # 1.字符串的下标(索引) # 取字符串中的子串 print('1.字符串的下标(索引)') str1 = 'PYTHON' print(str1[0]) print(str1[-4]) # 2.字 ...

  4. EntityFramework介绍

    首先我们说明一下ORM是什么. 微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上.开发人员使用Linq语言,对数据库操作如同操作Object对象 一 ...

  5. React+echarts (echarts-for-react) 画中国地图及省份切换

    有足够的地图数据,可以点击到街道,示例我只出到市级 以umi为框架,版本是: "react": "^18.2.0", "umi": &quo ...

  6. 8.drf-序列化器

    在序列化类中,如果想使用request,则可以通过self.context['request']获取 序列化器的主要由两大功能 - 对请求的数据进行校验(底层调用的是Django的Form和Model ...

  7. 【Java并发006】使用层面:Lock锁机制全解析

    一.前言 二.synchronized局限性 + Lock锁机制的引入 2.1 synchronized局限性 第一,使用synchronized,其他线程只能等待直到持有锁的线程执行完释放锁(syn ...

  8. 【ASP.NET Core】MVC控制器的各种自定义:修改参数的名称

    在上一篇中,老周演示了通过实现约定接口的方式自定义控制器的名称. 至于说自定义操作方法的名称,就很简单了,因为有内置的特性类可以用.看看下面的例子. [Route("[controller] ...

  9. 记一次mybatis性能问题分析过程

    说明 今天发现个2个问题,一是mybatisplus执行一条某个字段值比较长(约1.8M的文本)的INSERT语句耗时要90s+;二是读取这个1.8M文本返回给前端耗时6min.查查查查了半天搞不清楚 ...

  10. 4 c++编程-提高篇-STL简介

    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦!  生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要简单介 ...