angular新闻列表分页

ops/2025/2/26 12:32:19/

说明:使用angular技术,material控件,ngfor循环,img网络图片展示,分页组件

效果图:
在这里插入图片描述

step1: C:\Users\Administrator\WebstormProjects\untitled4\src\app\home\home.component.ts

javascript">import { Component, ViewChild, AfterViewInit } from '@angular/core';
import {MatListModule} from '@angular/material/list';
import {NgForOf, SlicePipe} from '@angular/common';
import {MatPaginator} from '@angular/material/paginator';// 定义列表项的数据结构
interface ListItem {id: number;title: string;description: string;avatarUrl: string;
}@Component({selector: 'app-home',imports: [MatListModule, NgForOf, MatPaginator, SlicePipe],templateUrl: './home.component.html',styleUrl: './home.component.css'
})
export class HomeComponent implements AfterViewInit {// 列表项数据数组listItems: ListItem[] = [{id: 1,title: 'Item 1',description: 'Item 1 description goes here',avatarUrl: 'https://randomuser.me/api/portraits/men/1.jpg'},{id: 2,title: 'Item 2',description: 'Item 2 description goes here',avatarUrl: 'https://randomuser.me/api/portraits/men/2.jpg'},{id: 3,title: 'Item 3',description: 'Item 3 description goes here',avatarUrl: 'https://randomuser.me/api/portraits/men/3.jpg'},{id: 4,title: 'Item 4',description: 'Item 4 description goes here',avatarUrl: 'https://randomuser.me/api/portraits/men/4.jpg'},{id: 5,title: 'Item 5',description: 'Item 5 description goes here',avatarUrl: 'https://randomuser.me/api/portraits/men/5.jpg'},{id: 6,title: 'Item 6',description: 'Item 6 description goes here',avatarUrl: 'https://randomuser.me/api/portraits/men/6.jpg'}];// 分页相关变量@ViewChild(MatPaginator) paginator!: MatPaginator;pageSize = 2; // 每页显示的条数currentPage = 0; // 当前页码constructor() { }// 处理点击事件handleClick(event: Event, itemId: number): void {console.log(`Clicked on item ${itemId}`);// 在这里可以添加其他逻辑,比如导航到详情页面}ngAfterViewInit(): void {// 将数据源连接到分页器this.paginator.length = this.listItems.length;this.paginator.pageSize = this.pageSize;}// 处理分页事件handlePageEvent(event: any): void {this.pageSize = event.pageSize;this.currentPage = event.pageIndex;console.log(`Page size: ${this.pageSize}, Page index: ${this.currentPage}`);}
}

step2: C:\Users\Administrator\WebstormProjects\untitled4\src\app\home\home.component.html

<mat-list role="list"><mat-list-item role="listitem" *ngFor="let item of listItems | slice: currentPage * pageSize : (currentPage + 1) * pageSize"><div class="item-container" (click)="handleClick($event, item.id)"><img[src]="item.avatarUrl"[alt]="item.title"class="item-avatar"/><div class="item-content"><h3 class="item-title">{{ item.title }}</h3><p class="item-description">{{ item.description }}</p></div></div></mat-list-item>
</mat-list><!-- 分页组件 -->
<mat-paginator[pageSize]="pageSize"[pageSizeOptions]="[2, 4, 6]"(page)="handlePageEvent($event)"[length]="listItems.length"[hidePageSize]="false"showFirstLastButtons="true">
</mat-paginator>

step3: C:\Users\Administrator\WebstormProjects\untitled4\src\app\home\home.component.css

/* 在你的 CSS 文件中添加以下样式 */
.custom-list {background-color: #f8f9fa; /* 列表背景色 */padding: 20px; /* 列表的内边距 */
}.list-item {background-color: #ffffff; /* 列表项背景色 */margin-bottom: 10px; /* 列表项之间的间距 */border-radius: 8px; /* 列表项的圆角 */box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* 添加阴影效果 */transition: transform 0.3s ease; /* 添加悬停动画 */
}.list-item:hover {transform: translateX(5px); /* 悬停时向右移动5px */box-shadow: 0 4px 6px rgba(0,0,0,0.15); /* 悬停时增加阴影 */
}.item-container {padding: 15px; /* 内容的内边距 */display: flex;align-items: center; /* 垂直居中 */
}.item-avatar {width: 60px;height: 60px;border-radius: 50%;background-color: #e0e0e0;object-fit: cover;margin-right: 15px;box-shadow: 0 2px 4px rgba(0,0,0,0.15);transition: transform 0.3s ease;
}.item-avatar:hover {transform: scale(1.05);
}.item-content {flex: 1; /* 文本内容占满剩余空间 */
}.item-title {color: #2c3e50; /* 标题颜色 */margin: 0; /* 移除标题的默认外边距 */font-size: 18px; /* 标题字体大小 */font-weight: 600; /* 标题加粗 */
}.item-description {color: #7f8c8d; /* 描述文字颜色 */margin: 5px 0 0 0; /* 描述文字的外边距 */font-size: 14px; /* 描述文字大小 */line-height: 1.5; /* 行高 */
}

end


http://www.ppmy.cn/ops/161406.html

相关文章

深入xtquant:掌握实时行情订阅的艺术

深入xtquant&#xff1a;掌握实时行情订阅的艺术 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在量化交易的世界里&#xff0c;实时行情数据是策略执行的生命线。无论是高频交易还是日内交易&#xff0c;及时获取市场动态都是成功的关键。本文将带你深入了解如何使…

期权帮|股指期货多单和空单有什么区别?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 股指期货多单和空单有什么区别&#xff1f; 一、股指期货多单和空单定义与操作方向&#xff1a; &#xff08;1&#xff09;股指期货多单定义&#xff1a;投资者买入股指期货合…

宿主机的 root 是否等于 Docker 容器的 root?

在 Docker 容器化技术中&#xff0c;宿主机的 root 和 容器的 root 并不完全相同&#xff0c;尽管它们都称作 “root 用户”。这里需要明确的是&#xff0c;Docker 容器与宿主机之间存在隔离机制&#xff0c;容器内的 root 用户和宿主机的 root 用户有一些关键的区别。 1. 宿主…

375_C++_cloud手机推送,添加人脸告警信息到任务队列中,UploadAlarmPush是典型的工厂模式应用,为什么使用工厂模式完成这部分代码

一:AlarmFaceInfo的应用 让我帮你解析这个lambda表达式的实现: // ...................... .h ...........................// struct RsMsgPushTask_S : public Task{AlarmType_E mainAlarmType;unsigned int subAlarmType;DateTime alarmTime

Humanoid-VLA:通过视觉集成实现通用人形机器人控制

25年2月来自西湖大学、浙江大学和西湖机器人公司的论文“Humanoid-VLA: Towards Universal Humanoid Control with Visual Integration”。 本文讨论当前人形机器人控制框架的局限性&#xff0c;这些框架主要依赖于反应机制&#xff0c;由于数据稀缺而缺乏自主交互能力。 Huma…

QT C++ QtConcurrent::run 异步任务 简单例子

QtConcurrent命名空间提供了高级API&#xff0c;使得无需使用低级线程原语即可编写多线程程序。 ‌QtConcurrent::run‌是Qt框架中用于简化并发编程的一个功能&#xff0c;主要用于在后台线程中异步执行函数或成员函数。其主要用途包括&#xff1a; ‌异步执行函数‌&#xf…

深入理解 `Sinks.Empty<Void>` 和 `Mono<Void>`:如何触发完成信号并结合 WebSocket 示例

在响应式编程中&#xff0c;Sinks 是 Project Reactor 提供的一个强大工具&#xff0c;用于手动控制数据流的信号发射。Sinks.Empty<Void> 是一种特殊的 Sinks&#xff0c;它不发射任何数据&#xff0c;仅用于表示完成或错误信号。结合 Mono<Void>&#xff0c;它可…

【linux核心命令】

【linux核心命令】 一级目录1. 使用 gzip 压缩为 .gz 格式知识点代码示例解压操作 2. 使用 bzip2 压缩为 .bz2 格式知识点代码示例解压操作 3. 使用 xz 压缩为 .xz 格式知识点代码示例解压操作 4. 使用 zip 压缩为 .zip 格式知识点代码示例解压操作 5. 使用 tar 结合压缩工具创…