解决angular11+zorro使用table组件排序失效以及分页组件失效问题,附完整DEMO代码

本文主要是介绍解决angular11+zorro使用table组件排序失效以及分页组件失效问题,附完整DEMO代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于这个排序失效问题的核心点,跟这个有关系:[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// 分頁代碼// 表格代碼----startlistOfColumns: 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 = econsole.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 = econsole.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 = newArrthis.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代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805146

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig