如何使用 Angular 中的导入数组引入外部导出功能

发布日期:2026-07-09 05:18:03   来源 : 杭州电子商务研究院    浏览量 :2
杭州电子商务研究院 发布日期:2026-07-09 05:18:03  
2

介绍

在本指南中,您将学习如何将功能模块导入项目,以便您可以将功能彼此分开并根据需要使用它们。模块是管道、指令和组件的组合。您可以导入模块来帮助您制作应用程序。将应用程序分成不同的部分并根据时间线组织代码总是好的,这可以帮助您快速获取有关每个模块的相关信息。功能模块可帮助您最大限度地减少错误并提高工作效率。

Angular 中的预定义功能模块

Angular 附带一些默认功能模块,可帮助您专注于功能,而不是从头开始实现。这些模块满足您的基本要求。它们包括:

  1. **CommonModule**:导出基本指令,如NgIf,NgForOf等。

  2. FormsModule:导出模板驱动表单的提供程序和指令,例如 MinLengthValidator 或 MaxLengthValidator。

创建自己的功能模块

在本节中,您将创建一个自定义功能模块。在此功能模块中,您将实现分页功能。如前所述,功能模块可以导出组件、指令和管道。在此功能中,您将导出一个组件。

您将在分页的帮助下显示一个值列表,这样用户就不必滚动太多,只需单击页码即可获取下一个项目。

首先创建一个项目。查看以下代码片段。

      $ ng new imports-array-demo
    

创建一个功能模块。

      $ ng g m pagination
    

在功能模块内创建一个组件,以便您可以导出它。

      $ ng g c pagination/components/pager
    

项目已设立。

现在,在pager.component.ts中进行更改

分页器.组件.ts

      import { Component, OnInit, Input, Output, EventEmitter } from "@angular/core";
import { Subject } from "rxjs";

@Component({
  selector: "app-pager",
  templateUrl: "./pager.component.html",
  styleUrls: ["./pager.component.scss"]
})
export class PagerComponent implements OnInit {
  @Input() pageSize: number;
  @Input() totalRecords: number;
  @Output() pageNumber = new EventEmitter<any>();
  firstPageNumber: number;
  lastPageNumber: number;
  currentPageNumber: number;
  numbers: number[];
  constructor() {
    this.firstPageNumber = 1;
    this.currentPageNumber = 1;
    this.numbers = [];
  }

  ngOnInit() {}

  ngOnChanges() {
    this.onGenerateNumbers();
  }

  onGenerateNumbers() {
    this.lastPageNumber = Math.ceil(this.totalRecords / this.pageSize);
    for (let i = 1; i <= this.lastPageNumber; i++) {
      this.numbers.push(i);
    }
  }

  onNumberClick(number) {
    this.pageNumber.emit(number);
  }
}
    

这里您从父组件接受pageSizetotalRecords。这两个要求有助于生成页码。在onGenerateNumbers()函数中,生成的数字存储在数组中。

接下来,当用户点击数字时发出事件。

在 HTML 模板中,显示您在onGenerateNumbers()函数中创建的数字

分页器.组件.html

      <div style="text-align: center">
  <button *ngFor="let number of numbers" (click)="onNumberClick(number)">
    {{number}}
  </button>
</div>
    

每个数字按钮都绑定了一个点击函数,该函数将调用onNumberClick()函数。此函数将发出用户点击的数字。

要在AppComponent中使用此组件,请从功能模块中导出它。

分页.模块.ts

      import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { PagerComponent } from "./components/pager/pager.component";

@NgModule({
  declarations: [PagerComponent],
  imports: [CommonModule],
  exports: [PagerComponent]
})
export class PaginationModule {}
    

现在您可以将其导入到您想要使用分页器组件的任何其他模块中。

现在,将其导入AppModule

应用程序.模块.ts

      import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";

import { AppComponent } from "./app.component";
import { HttpClientModule } from "@angular/common/http";
import { PaginationModule } from "./pagination/pagination.module";

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, PaginationModule, HttpClientModule],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}
    

在这里您可以看到,在模块的导入数组中,您已经导入了功能模块PaginationModule

现在你将要使用分页组件。你需要首先获取数据以满足分页组件的要求。

应用程序.组件.ts

      import { Component } from "@angular/core";
import { HttpClient } from "@angular/common/http";

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.scss"]
})
export class AppComponent {
  posts: any;
  currentPagenumber: number;
  pageSize: number;
  totalRecords: number;
  paginatedPosts: any;

  constructor(private _httpClient: HttpClient) {}

  ngOnInit() {
    this.currentPagenumber = 1;
    this.pageSize = 12;
    this.getData();
  }

  getData() {
    let URL = "https://jsonplaceholder.typicode.com/posts";
    this._httpClient.get(URL).subscribe(posts => {
      this.posts = posts;
      this.totalRecords = this.posts.length;
      this.paginatedPosts = this.pagination(
        this.posts,
        this.currentPagenumber,
        this.pageSize
      );
    });
  }

  onGetPageNumber(number) {
    this.currentPagenumber = number;
    this.paginatedPosts = this.pagination(
      this.posts,
      this.currentPagenumber,
      this.pageSize
    );
  }

  pagination(items, pageNumber, pageSize) {
    let startIndex = (pageNumber - 1) * pageSize;
    let endIndex = startIndex + pageSize;
    return items.slice(startIndex, endIndex);
  }
}
    

AppComponent中,创建一个 ajax 请求并获取帖子数据。将帖子的长度存储在totalRecords中。您需要一个页面大小来决定页面中的项目。在构造函数中,将页面大小设置为 12。

onGetPageNumber ()函数接受来自寻呼机组件的页码。它将充当currentPageNumber的角色

您编写了一个小函数pagination() ,它将根据currentPageNumber返回posts数组中的项目

接下来,在app.component.html中编写一个分页器组件

应用程序.组件.html

      <div style=" display: flex; flex-wrap: wrap;justify-content: center">
  <div
    *ngFor="let post of paginatedPosts"
    style="width: calc(90% / 3);box-sizing: border-box;padding: 10px;box-shadow: 0 0 2px 0px; margin: 10px;"
  >
    <div>
      <span><b>Id:</b>{{post.id}}</span>
      <p><b>Title:</b>{{post.title}}</p>
      <p><b>Body:</b>{{post.title}}</p>
    </div>
  </div>
</div>
<app-pager
  [pageSize]="pageSize"
  [totalRecords]="totalRecords"
  (pageNumber)="onGetPageNumber($event)"
></app-pager>
    

现在,运行项目并检查结果。

在输出中,您可以看到您的数据已在浏览器中成功呈现,并且分页器组件正常工作。

赞!您已成功创建功能模块并导出组件,然后使用imports数组将其导入AppModule

结论

在本指南中,我们了解了功能模块以及如何使用imports数组导入它们。Angular 有许多预定义的功能模块,它们将帮助您解决问题并在更短的时间内完成您的应用程序。您可以在此处<font style="vertical-align: i

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据