如何在 Angular 4 中创建分页组件? [关闭]

2024-03-31

我有一个 API 端点,例如/list/students?page=5&rows=10带分页参数page and size。我想创建一个 angular2 分页组件。

输入参数将是

  • page
  • size

另外,我想用箭头按钮转到特定页面和尺寸。

我怎样才能实现这个组件?


您可以使用我的以下代码和服务创建分页组件

应用程序组件.html

<paging-component
  [TotalItems]="pagination.TotalItems"
  [CurrentPage]="pagination.CurrentPage"
  [PageSize]="pagination.PageSize"
  [TotalPageLinkButtons]="pagination.TotalPageLinkButtons"
  [RowsPerPageOptions]="pagination.RowsPerPageOptions"
  (onPageChange)="myChanges($event)"></paging-component>

app.component.ts 如下;

import {Component} from '@angular/core';

@Component({
  selector   : 'app-root',
  templateUrl: './app.component.html',
  styleUrls  : ['./app.component.css']
})
export class AppComponent {

  pagination = {
    TotalItems: 100,
    CurrentPage: 1,
    PageSize: 10,
    TotalPageLinkButtons: 5,
    RowsPerPageOptions: [10, 20, 30, 50, 100]
  };

  /* Paging Component metod */
  myChanges(event) {
    this.pagination.CurrentPage = event.currentPage;
    this.pagination.TotalItems = event.totalItems;
    this.pagination.PageSize = event.pageSize;
    this.pagination.TotalPageLinkButtons = event.totalPageLinkButtons;
  }
}

应用程序组件模块

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {HttpModule} from '@angular/http';

import {AppComponent} from './app.component';
import {PagingComponent} from './components/paging-component/paging-component.component';
import {PagingService} from './service/paging-service.service';

@NgModule({
  declarations: [
    AppComponent,
    PagingComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [ PagingService],
  bootstrap: [AppComponent]
})
export class AppModule { }

寻呼服务.service.ts 是

import { Injectable } from '@angular/core';

@Injectable()
export class PagingService {


  /**
   * @param totalItems : Total items to be listed
   * @param currentPage : Current page number ( Pages starting from 1 not 0)
   * @param pageSize : The number of items in the page
   * @param totalPageLinkButtons : The number of total page link buttons
   * @returns {{
   * startPage: number,
   * endPage: number,
   * startIndex: number,
   * endIndex: number,
   * totalPageLinkButtons: number,
   * totalItems: number,
   * currentPage: number,
   * pageSize: number,
   * totalPages: number,
   * pages: (Observable<number>|any)
   * }}
   */
  getPagingServiceItems(totalItems: number, currentPage: number = 1, pageSize: number = 10, totalPageLinkButtons: number = 5) {

    totalItems = totalItems || 1;

    /* if currentPage not exists default value will be '1' */
    currentPage = currentPage || 1;

    /* The default value of the number of items in the page is 10 if not exist */
    pageSize = pageSize || 10;

    /* The default value of the number of total page link buttons is 10 if not exist */
    totalPageLinkButtons = totalPageLinkButtons || 10;

    /* calculate total pages  */
    const totalPages = Math.ceil(totalItems / pageSize);


    let startPage: number; // start Page Button number
    let endPage: number;   // end Page Button number

    if (totalPages <= totalPageLinkButtons) {

      // less than totalPageButtons then show all
      // 1,2,3,.., totalPages are buttons
      startPage = 1;
      endPage = totalPages;
    } else {
      // more than totalPageButtons then calculate start and end pages
      // currentPage will be on the center of the paging

      if (currentPage <= Math.ceil(totalPageLinkButtons / 2)) {
        startPage = 1;
        endPage = totalPageLinkButtons;
      } else if (currentPage + Math.ceil(totalPageLinkButtons / 2) > totalPages) {
        startPage = totalPages - totalPageLinkButtons + 1;
        endPage = totalPages;
      } else {
        startPage = currentPage - Math.ceil(totalPageLinkButtons / 2) + 1;
        endPage = startPage + totalPageLinkButtons - 1;
      }
    }

    // calculate start and end item indexes
    // Indexes are started from 0 ! It is important

    const startIndex = (currentPage - 1) * pageSize;
    const endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);

    const pages = [];
    // create an array of pages to ng-repeat in the pager control
    for ( let i = startPage; i <= endPage ; i++) {
      pages.push(i);
    }

    // return object with all paging properties required by the view
    return {
      startPage           : startPage,
      endPage             : endPage,
      startIndex          : startIndex,
      endIndex            : endIndex,
      totalPageLinkButtons: totalPageLinkButtons,
      totalItems          : totalItems,
      currentPage         : currentPage,
      pageSize            : pageSize,
      totalPages          : totalPages,
      pages               : pages
    };
  }


}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 4 中创建分页组件? [关闭] 的相关文章

  • npm 错误!遵循 Angular 2 快速入门时出现无效名称:“@angular/core”

    我正在尝试遵循Angular 2 快速入门 https angular io docs ts latest quickstart html 第一步是设置环境 我对 npm 并不是完全陌生 我设法安装并尝试了 Ember 但仅此而已 下面是我
  • 如何禁用 Angular 2 中的复选框

    我想禁用复选框输入 我的意思是 用户无法选中复选框 有一个属性可以禁用它吗 例如 启用 或 禁用 或者我该如何解决这个问题
  • Jasmine:期望在异步函数中抛出错误

    我的 angular2 应用程序中有一个异步函数 我想为其编写单元测试 想象一下我的功能是这样的 myFunc a int Promise
  • 为什么我们需要`ngDoCheck`

    我似乎不明白为什么我需要ngDoCheck生命周期钩子除了用于简单的通知之外 特别是在其中编写代码如何对更改检测产生影响 我发现的大多数例子都显示了无用的例子 比如this one https juristr com blog 2016 0
  • 使用 setInterval 时 Angular2 视图未更新

    我正在使用 Angular2 RC5 我有一个奇怪的问题 在我的主要组件中 我在构造函数中用于测试目的 setInterval gt this test new Date getMilliseconds toString 500 我的模板中
  • 由 aws API 制作的 HttpRequest 拦截器

    我正在开发一个项目 该项目使用 cognito 作为身份验证服务来保护使用 nodeJS 制作的无服务器休息 API 我已成功关闭未经身份验证的客户端的 API 现在 每当我从 Angular 客户端发出请求时 我都需要在标头中自动注入一个
  • 使用 ngFor 的内联样式背景图像

    我正在尝试为 ngFor 循环中的每个 div 设置背景图像 在我循环的 JSON 中 我有一个属性property Image包含图像的 url 字符串 img src flag properties Image 有效 但我尝试将图像显示
  • Angular 2 从 styles.scss 扩展样式

    在 Angular 2 中 我的 CSS 类styles scss file FirstClass 我试图在组件的 SCSS 文件中扩展此类 例如 MyComponent scss like SecondClass extend First
  • 如何在 Angular2 中注销时获取新实例/重新加载所有服务

    我正在开发 Angular 2 应用程序 它类似于最后提供的 Plunker 链接 在 HeroService 中 我有一个属性 clickCount 该属性将在单击英雄时增加 但是登录后我想重置这个参数 我不想使用该服务并重置其值 实际上
  • Angular 6 服务器端错误:找不到模块:错误:无法解析“./dist/server/main.bundle”

    我正在开发一个项目 将其更新到 Angular 6 更新后 我现在在尝试运行服务器端渲染构建时收到此错误 Module not found Error Can t resolve dist server main bundle 我尝试去ht
  • Ionic 2 beta 11:初始化日期时间组件以考虑本地时区

    我遇到了问题datetimeIonic 2 beta 11 中的组件 根据我在离子 API 文档 http ionicframework com docs v2 api components datetime DateTime 我应该从 D
  • 如何在 ag-grid 中以编程方式更改“无行显示”文本?

    我最近一直在修补 Ag grid 当我从 REST API 获取一些数据时 我想将 无行显示 文本更改为 数据正在加载 数据以 JSON 对象数组的形式返回 但是 如果 API 确实返回一个空数组 我希望 数据正在加载 文本更改为 无行可显
  • Angular 2 Renderer2 - 它是如何工作的

    我试图理解在 Angular 2 的指令或组件中添加 renderer2 装饰的必要性 来自文档 渲染器2文档 https angular io api core Renderer2他们没有提供其工作原理的示例 谁能用完整的例子解释一下 请
  • 关注新添加的输入元素

    我有一个新的 Angular 2 应用程序 其中包含以下列表input盒子 当用户按下返回键时 我添加一个新的input紧接着他们当前正在编辑的框后面的框 或者更确切地说 我 异步 向模型中的数组添加一个新条目 这会导致 Angular 2
  • 如何使用 Visual Studio 2017 在 Azure 上部署 Angular 6 应用程序

    我使用 angular cli 创建了一个 Angular 应用程序 npm install g angular cli ng new my app 现在我想将这个简单的 Angular 应用程序部署到 Azure 我已经发布了设置 我该怎
  • 如何以编程方式切换 Angular 材质扩展面板

    我刚刚开始从事 Angular 4 项目的材料设计工作 我目前正在研究扩展组件 API 规定 https material angular io components expansion overview that 用户无法切换禁用的扩展面
  • ReactJs 中输出事件的 Angular

    我正在寻找在 ReactJs 中创建类似 Angular 等输出事件的方法 我正在根据 Atomic 设计在 ReactJs 中制作一个组件库 因此 例如 我在其他组件中注入了一个 Button 我想知道如何为 Button 编写一个 pr
  • 使用 @Input() 时出现 TypeScript 错误

    我正在尝试使用 Angular 4 开发一个应用程序 但是我在使用时收到一条错误消息 Input inputProducts products Product 错误是 tslint 在 ProductListComponent 类中 指令输
  • Angular Service Worker 路线

    我已经使用 Angular Service Worker 构建了一个应用程序 除了路线之外 它在离线状态下运行良好 如果我转到基本网址 应用程序加载正常 但如果我在离线状态下转到任何其他路线 则会收到离线错误 我的 ngsw manifes
  • Angular 2:*ngFor 中的 *ngFor

    下面的场景在 javascript 中非常简单 但在 Angular 中让它工作时遇到了一些问题 我有一个像这样的数组 array a id 0 name random column 1 2 or 3 blockrow 1 2 or 3 使

随机推荐

  • Rails 中非常有限的 502 Bad Gateway 错误

    这太奇怪了 我的一位客户一直收到 502 Bad Gateway 错误 在每个浏览器中都没有失败 但只有在我的 Rails 站点的一个特定页面上 她可以正常访问其余页面 此外 其他人 包括同一公司网络上的人员 可以正常访问同一页面 此外 生
  • 如何将 & 和 < 等特殊字符插入 JSF 组件的 value 属性中?

    如何插入特殊字符如 and lt 进入 JSF 组件value属性 例如 我想要这样的东西
  • 将图像从 iOS 应用程序上传到 php --- 不太正确 --- 我错过了什么?

    首先 我知道这个问题已经被问过一千次了 我再次询问 因为我已经尝试了其他示例中的解决方案 但它们对我不起作用 我不知道为什么 每个人的方法似乎都略有不同 NSData imageData UIImagePNGRepresentation f
  • 在循环中重用 StringBuilder 是否更好?

    我有一个关于使用 StringBuilder 的性能相关问题 在一个很长的循环中我正在操纵StringBuilder并将其传递给另一个方法 如下所示 for loop condition StringBuilder sb new Strin
  • 如何使用 Spring Security 中的新密码编码器

    从 Spring Security 3 1 4 RELEASE 开始 旧的org springframework security authentication encoding PasswordEncoder 已被弃用 https jir
  • 如何模拟 Jest/酶测试中的下拉菜单选择?

    我正在尝试为我的 React 组件编写笑话测试 该组件具有如下所示的下拉列表
  • 在 Python 3.4 中从 DataFrame 中删除 NA 值

    import pandas as pd import statistics df print pd read csv 001 csv keep default na False na values print df 我正在使用此代码创建一个
  • lme4 和 languageR 兼容性错误:“输入模型不是 mer 对象”

    我有一个数据集 dat2 我想在其上拟合线性混合效应模型 我过去使用 lmer 包 lme4 作为 pvals fnc 的补充来计算相关的 p 值 但是 由于我使用新的 lme4 1 0 4 和 languageR 1 4 包重新安装了 R
  • 在查询字符串中发布嵌套对象 - Node.js

    我的代码尝试将数据从本地 Node js 服务器发布到 Coldfusion API 我已成功与 API 进行通信并通过请求标头对自己进行身份验证 然而 我在实际传递 JSON 对象时遇到了困难 因为我无法获得正确的结构 API 不接受请求
  • 雷斯克 vs Sidekiq? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在使用Resque对于我的后台进程 但最近我听到了很多关于sidekiq 有人可以比较 区分吗 我特别想知道是否有一种方法可以
  • 使用 Javascript 获取支持 bean 值

    JSF 2 0 莫贾拉 2 0 1 PrimeFaces 3 4 1 有类似的问题 但我需要某物 别的 javascript函数必须等待backing bean方法 该方法正在填充想要从js函数中提取的变量 我想说的是
  • C++ 向量累加

    我试图对向量使用累积函数 vector
  • 在有序数组中添加额外的数字

    在已经上升的有序数组中插入新数字的最佳方法是什么 new number 6 old array array 1 3 4 5 7 8 10 new array must be 1 3 4 5 6 7 8 10 为什么不直接添加它并再次排序呢
  • OpenCV 2.4.1 - 在 Python 中计算 SURF 描述符

    我正在尝试更新我的代码以使用cv2 SURF 相对于cv2 FeatureDetector create SURF and cv2 DescriptorExtractor create SURF 但是 在检测到关键点后 我无法获取描述符 正
  • Android SU 权限:如何使用它们?

    这里有一种情况 我正在使用 Java 开发一个 Android 应用程序 我对这些东西都很熟悉 但现在这是我第一次需要使用 SU 权限 我只需要替换 实际上是重命名 system app 目录中的文件 但看起来我无法以通常的方式执行它 Fi
  • 启动python解释器时显示的消息的含义

    我知道这肯定是基本信息或知识 但我想知道 并且找不到答案 执行后立即显示什么信息或含义是什么python命令并启动解释器 例如 在这种情况下这意味着什么 Win32 上的 Python 3 8 7 tags v3 8 7 6503f05 2
  • Curl 返回 http 状态代码以及响应

    我使用curl 获取http 标头来查找http 状态代码并返回响应 我使用命令获取 http 标头 curl I http localhost 为了获得响应 我使用命令 curl http localhost 一旦使用 I 标志 我就只得
  • JUnit - 初始化程序错误中的异常

    我正在尝试使用静态方法测试一个类 但在这一行中出现错误 FormReferenceDataPopulator target new FormReferenceDataPopulator 这是失败的痕迹 java lang Exception
  • 防止导航到同一片段

    我正在使用带有 BottomNavigationView 的 Android 导航 jetpack 库 我已经实现了 NavHost NavGraph 和我的片段 当我使用操作进行导航时 一切都按预期进行 我使用以下代码来设置一切 val
  • 如何在 Angular 4 中创建分页组件? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个 API 端点 例如 list students page 5 rows 10带分页参数page and size 我想创建一个 a