ABP-Book Store Application中文講解 - Part 2: The Book List Page

本章用于介紹如何創建Book List Page。

?TBD

1. 匯總

ABP-Book Store Application中文講解-匯總-CSDN博客

2. 前一章?

ABP-Book Store Application中文講解 - Part 1: Creating the Server Side

項目之間的引用關系。

目錄

1. 多語言配置?

1.1 zh-Hans.json?

1.2 en.json

2. 添加proxy

2.1 前置條件

2.2 利用abp自動生成angular端的service

3. 創建Books頁面

3.1 利用ng generate生成頁面組件

3.2 在route.provider.ts中配置菜單

3.2?添加頁面內容到BookComponent

3.2.1 book.component.ts?

3.2.1.1 非standalone模式

3.2.1.2?standalone 模式 (推薦此模式)

?3.2.2?book.component.html

4.啟動項目

5. Angular推薦使用全獨立模式避免NgModule的干擾

?6. 繼續學習


1. 多語言配置?

在開始做UI的開發前,我們需要對UI端的一些信息做多語言處理。Localization\BookStore里面有很多json文件。

zh-Hans.json簡體中文

zh-Hant.json繁體中文

en.json English

此處根據自己需要自行添加。不用的語言可以自行刪除。

需要注意的是要保證你所更改的json文件里面的key一一對應。

1.1 zh-Hans.json?

{"culture": "zh-Hans","texts": {"AppName": "BookStore","Menu:Home": "首頁","Welcome": "歡迎","LongWelcomeMessage": "歡迎使用本應用程序。這是一個基于 ABP 框架的啟動項目。更多信息,請訪問 abp.io。",// 以下內容是新增內容"Menu:BookStore": "Book Store","Menu:Books": "Books","Actions": "操作","Close": "關閉","Delete": "刪除","Edit": "編輯","PublishDate": "發布日期","NewBook": "新增書","Name": "名字","Type": "類型","Price": "價格","CreationTime": "新建日期","AreYouSure": "你確定嗎?","AreYouSureToDelete": "你確定你要刪除此條目嗎?","Enum:BookType.0": "未定義","Enum:BookType.1": "冒險","Enum:BookType.2": "傳記","Enum:BookType.3": "反烏托邦","Enum:BookType.4": "奇幻","Enum:BookType.5": "恐怖","Enum:BookType.6": "科學","Enum:BookType.7": "科幻","Enum:BookType.8": "詩歌"}
}

1.2 en.json

{"Culture": "en","Texts": {"Menu:Home": "Home","Welcome": "Welcome","LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP. For more information, visit abp.io.",// 以下內容是新增內容"Menu:BookStore": "Book Store","Menu:Books": "Books","Actions": "Actions","Close": "Close","Delete": "Delete","Edit": "Edit","PublishDate": "Publish date","NewBook": "New book","Name": "Name","Type": "Type","Price": "Price","CreationTime": "Creation time","AreYouSure": "Are you sure?","AreYouSureToDelete": "Are you sure you want to delete this item?","Enum:BookType.0": "Undefined","Enum:BookType.1": "Adventure","Enum:BookType.2": "Biography","Enum:BookType.3": "Dystopia","Enum:BookType.4": "Fantastic","Enum:BookType.5": "Horror","Enum:BookType.6": "Science","Enum:BookType.7": "Science fiction","Enum:BookType.8": "Poetry"}
}

2. 添加proxy

2.1 前置條件

打開cmd.exe,輸入ng --version查看是否安裝了@angular/cli,如果沒安裝,可通過以下命令安裝。

npm install -g @angular/cli

利用abp的命令自動生成proxy。此時有個前置條件是abp的命令只能調用dotnet tool下的API啟動方式,無法調用基于IIS Express啟動下的API。

即需要將Acme.BookStore.HttpApi.Host啟動模式選擇Acme.BookStore.HttpApi.Host

?設置好后,點擊F5啟動程序。

2.2 利用abp自動生成angular端的service

vs code 打開angular目錄,ctrl+`打開Terminal window, 然后輸入一下命令敲回車。

3. 創建Books頁面

此處UI組件用的是Ng Bootstrap, datatable組件用的是Ngx-Datatable.或者你可以使用PrimeNG - Angular UI Component Library

3.1 利用ng generate生成頁面組件

此處利用ng命令去自動生成相關的ts文件。

ng generate module book --module app --routing --route books

以上代碼創建book module和routing并指定route是books,并自動創建book相關的component,module和router,router會被自動添加到app-routing.module.ts中。

如果是你手動創建的component或者module,需要自己手動添加到app-routing.module.ts中。

loadChildren: () => import('./book/book.module').then(m => m.BookModule)這種方式是lazy-load的方式,只有在用戶點擊對應的頁面的時候才會加載對應頁面的js、css、html等。

3.2 在route.provider.ts中配置菜單

打開src/app/route.provider.ts,添加book-store 和books.

RoutesService是ABP用于配置主菜單和路徑的,不是angualr原生。

  • path?訪問此頁面的URL
  • name?本地化菜單名字(localization document?).如果你不需要本地化,直接寫死也可以的
  • iconClass?菜單圖標 (你可以從Font Awesome?上面找到你需要的icons).
  • order?菜單的順序.
  • layout?BooksModule's routes布局方式 (提供了三種布局方式:?eLayoutType.application,?eLayoutType.account?or?eLayoutType.empty).

后面我會單獨針對ABP的前端UI-Angular UI寫一系列的文章ABP User Interface-Angular UI中文詳解-CSDN博客。

import { RoutesService, eLayoutType } from '@abp/ng.core';
import { APP_INITIALIZER } from '@angular/core';export const APP_ROUTE_PROVIDER = [{ provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true },
];function configureRoutes(routesService: RoutesService) {return () => {routesService.add([{path: '/',name: '::Menu:Home',iconClass: 'fas fa-home',order: 1,layout: eLayoutType.application,},{path: '/book-store',name: '::Menu:BookStore',iconClass: 'fas fa-book',order: 2,layout: eLayoutType.application,},{path: '/books',name: '::Menu:Books',// iconClass: 'fas fa-user',parentName: '::Menu:BookStore',order: 3,layout: eLayoutType.application,}]);};
}

3.2?添加頁面內容到BookComponent

添加頁面內容。

導入并注冊BookService和ListService.

BookService是利用ng generate-proxy生成的服務

ListService是ABP團隊創建的,提供了分頁、排序和查詢。ListService不是注冊在root級別,他是component級別的,即component銷毀后,當前頁面的ListService會同步銷毀。

具體可以在Working with Lists | ABP.IO Documentation中找到,后序我會在ABP User Interface-Angular UI中文詳解-CSDN博客提供中文版本的使用說明。

3.2.1 book.component.ts?

3.2.1.1 非standalone模式
import { Component, OnInit } from '@angular/core';
import { ListService, PagedResultDto } from '@abp/ng.core';  // Import ListService and PagedResultDto
import { BookService, BookDto } from '../proxy/books';  // Import your BookService and BookDto model
import { SharedModule } from '../shared/shared.module';@Component({selector: 'app-book',templateUrl: './book.component.html',styleUrl: './book.component.scss',standalone: false, // 標記為獨立組件// imports: [SharedModule], // 導入需要的模塊providers: [ListService]  // Provide ListService for this component
})
export class BookComponent implements OnInit {book = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;  // Initialize books as an empty PagedResultDtoconstructor(private bookService: BookService, public readonly list: ListService) { }  // Inject BookService and ListServicengOnInit() {  // Use ngOnInit to fetch books when the component initializesthis.list.hookToQuery(this.bookService.getList).subscribe((response) => {  // Hook to the query and subscribe to the responsethis.book = response;  // Assign the response to books});}
}

還需要在book.module.ts聲明BookComponent

import { NgModule } from '@angular/core';
// import { CommonModule } from '@angular/common';import { SharedModule } from '../shared/shared.module';
import { BookRoutingModule } from './book-routing.module';
import { BookComponent } from './book.component';@NgModule({declarations: [BookComponent],imports: [BookRoutingModule,SharedModule// shared module already export CommonModule, so we don't need to import it again.]
})
export class BookModule { }
3.2.1.2?standalone 模式 (推薦此模式)

如果使用的是Angualr 14+, 則需要改成如下所示:

import { Component, OnInit } from '@angular/core';
import { ListService, PagedResultDto } from '@abp/ng.core';  // Import ListService and PagedResultDto
import { BookService, BookDto } from '../proxy/books';  // Import your BookService and BookDto model
import { SharedModule } from '../shared/shared.module';@Component({selector: 'app-book',templateUrl: './book.component.html',styleUrl: './book.component.scss',standalone: true, // 標記為獨立組件imports: [SharedModule], // standalone: true導入需要的模塊providers: [ListService]  // Provide ListService for this component
})
export class BookComponent implements OnInit {book = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;  // Initialize books as an empty PagedResultDtoconstructor(private bookService: BookService, public readonly list: ListService) { }  // Inject BookService and ListServicengOnInit() {  // Use ngOnInit to fetch books when the component initializesthis.list.hookToQuery(this.bookService.getList).subscribe((response) => {  // Hook to the query and subscribe to the responsethis.book = response;  // Assign the response to books});}
}

?book.module.ts移除BookComponent聲明

import { NgModule } from '@angular/core';
import { SharedModule } from '../shared/shared.module';
import { BookRoutingModule } from './book-routing.module';@NgModule({declarations: [],imports: [BookRoutingModule,SharedModule// shared module already export CommonModule, so we don't need to import it again.]
})
export class BookModule { }

?3.2.2?book.component.html

Tips: 比如你想實現<div class="card"></div>, 此時你只需要輸入div.card然后直接敲Tab,vs code可以幫你自動生成。

類似的輸入h5.card-title敲Tab自動生成<h5 class="card-title"></h5>

4.啟動項目

后端API需要先啟動。

npm start重新編譯后,瀏覽器會自動打開,然后左側會顯示Book Store菜單。

展開后選擇Books,加載數據完成如下圖所示:

5. Angular推薦使用全獨立模式避免NgModule的干擾

// AppComponent.ts(獨立根組件)
import { Component } from '@angular/core';
import { BookComponent } from './book/book.component';
import { BrowserModule } from '@angular/platform-browser'; // 若需導入模塊,需在 imports 中聲明@Component({selector: 'app-root',template: `<app-book></app-book>`,imports: [BrowserModule, BookComponent], // 導入依賴的模塊和獨立組件。類似把app.module.ts中的imports都放在此處standalone: true // 根組件標記為獨立
})
export class AppComponent { }

?6. 繼續學習

ABP-Book Store Application中文講解 - Part 3: Creating, Updating and Deleting Books

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80973.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

6、登錄功能后端開發

6、登錄功能后端開發 https://xiaoxueblog.com/ai/%E7%99%BB%E5%BD%95%E5%8A%9F%E8%83%BD%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91.html 1、新建用戶表SQL腳本 -- CREATE DATABASE aicloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 創建用戶表 drop table if exi…

隨機矩陣放大的方式 生成相位數據集,用于相位展開

import os import numpy as np import matplotlib.pyplot as plt from scipy.ndimage import zoom import gc from tqdm import tqdm from zernike import RZerndef wrap_phase(phase):"""將相位包裹到[-π, π]區間"""return np.angle(np.exp(1…

Java面試全記錄:Spring Cloud+Kafka+Redis實戰解析

Java面試全記錄&#xff1a;Spring CloudKafkaRedis實戰解析 人物設定 姓名&#xff1a;張偉&#xff08;隨機生成唯一姓名&#xff09; 年齡&#xff1a;28歲 學歷&#xff1a;碩士 工作年限&#xff1a;5年 工作內容&#xff1a; 基于Spring Cloud搭建微服務架構使用Kafka…

Java Socket編程完全指南:從基礎到實戰應用

Socket編程是構建網絡應用的基石&#xff0c;Java通過java.net包提供了強大的Socket API。本文將深入解析Java Socket類的核心用法&#xff0c;涵蓋TCP/UDP協議實現、多線程通信及性能優化技巧&#xff0c;助您快速掌握網絡編程精髓。 一、Socket編程核心概念 1.1 網絡通信模型…

vue實現導出echarts圖片和table表格

安裝依賴 "xlsx": "^0.18.5","xlsx-style": "^0.8.13""file-saver": "^2.0.5",工具類 toolUtil const autoHeight () > {let winHeight 0if (window.innerHeight) {winHeight window.innerHeight} else if…

AI預測3D新模型百十個定位預測+膽碼預測+去和尾2025年5月15日第78彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺6-8個和值&#xff0c;可以做到100-300注左右。 (1)定…

蘭亭妙微B端UI設計:融合多元風格,點亮品牌魅力

在B端產品市場&#xff0c;獨特的品牌形象是企業脫穎而出的關鍵。蘭亭妙微專注于B端UI設計&#xff0c;通過融合多元風格&#xff0c;為企業點亮品牌魅力&#xff0c;助力品牌價值提升。 蘭亭妙微主創團隊源自清華&#xff0c;歷經多年沉淀&#xff0c;積累了豐富的設計經驗。…

MMTEA-DTS--用于多目標多任務優化的基于分解的遷移選擇

MMTEA-DTS–用于多目標多任務優化的基于分解的遷移選擇 title&#xff1a; Multiobjective Multitasking Optimization With Decomposition-Based Transfer Selection author&#xff1a; Qiuzhen Lin, Zhongjian Wu, Lijia Ma, Maoguo Gong , Jianqiang Li, and Carlos A. C…

Python機器學習筆記(二十三 模型評估與改進-網格搜索)

上一次學習了評估一個模型的泛化能力,現在繼續學習通過調參來提升模型的泛化性能。scikit-learn中許多算法的參數設置,在嘗試調參之前,重要的是要理解參數的含義。找到一個模型的重要參數(提供最佳泛化性能的參數)的取值是一項棘手的任務,但對于幾乎所有模型和數據集來說…

集成DHTMLX 預訂排期調度組件實踐指南:如何實現后端數據格式轉換

在企業級應用中&#xff0c;預訂系統&#xff08;Booking System&#xff09;作為典型的調度類應用&#xff0c;廣泛用于酒店、會議室、設備預約、醫療排班等業務場景。而DHTMLX Scheduler作為一款功能強大且高度可定制的 JavaScript 日程安排控件&#xff0c;已成為眾多開發者…

35頁AI應用PPT《DeepSeek如何賦能職場應用》DeepSeek本地化部署與應用案例合集

這份名為《DeepSeek如何賦能職場應用》的PPT文檔詳細介紹了DeepSeek這一人工智能工具在職場中的多樣化應用場景和操作技巧。內容涵蓋了從基礎模型到深度思考模型的不同功能&#xff0c;以及如何通過提示語技巧實現高效的人機協作。文檔還展示了DeepSeek在制作可視化圖表、PPT、…

Axure疑難雜癥:母版菜單設置打開鏈接后菜單選中效果

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:菜單打開鏈接后子菜單選中效果 主要內容:母版設計、選中效果 應用場景:頁面賦值 案例展示: 案例視頻:

1.1 認識編程與C++

認識編程與C教程 目標 理解程序、指令、數據的概念。了解C在現實中的應用場景。學會搭建編程環境&#xff0c;邁出第一步。 一、編程是什么&#xff1f;——給計算機寫“魔法指令” 1. 基本概念 程序&#xff1a;一系列指令的集合&#xff0c;像一本“魔法食譜”。 &#x…

centos7部署mysql5.7

1.下載mysql的官方yum源 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2.安裝yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm3.安裝秘鑰文件 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20224.安裝mysql5.7…

javascript —— ! 和 !! 的區別與作用

javascript —— ! 和 !! 的區別與作用 在 JavaScript 里&#xff0c;! 和 !! 是兩種不同的邏輯運算符&#xff0c;它們的功能和使用場景有明顯區別。 1、 !&#xff08;邏輯非運算符&#xff09; 它的主要作用是 對操作數進行布爾值取反。具體來說&#xff0c;就是 先把操作…

基于互聯網和LabVIEW的多通道數據采集系統仿真設計

標題:基于互聯網和LabVIEW的多通道數據采集系統仿真設計 內容:1.摘要 在當今科技飛速發展的背景下&#xff0c;多通道數據采集在眾多領域有著廣泛需求。本研究的目的是設計一個基于互聯網和LabVIEW的多通道數據采集系統仿真方案。采用互聯網技術實現數據的遠程傳輸與共享&…

前后端設置跨域并從后端允許發送cookie

在java后端創建config文件 package com.zf.demo.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigur…

【Java ee】關于抓包軟件Fiddler Classic的安裝與使用

Web Debugging Proxy Tool | Fiddler Classic 安裝網站↑ 下載好安裝包之后&#xff0c;雙擊一路next就可以了 一、抓包軟件 電腦上安裝了抓包軟件之后&#xff0c;抓包軟件就可以監聽你的網卡上通過的數據。 本來是你的客戶端通過網卡&#xff0c;把數據發給目標服務器&a…

【Java ee初階】http(1)

HTTP 全稱為“超文本傳輸協議”&#xff0c;由名字可知&#xff0c;這是一個基于文本格式的協議&#xff0c;而TCP&#xff0c;UDP&#xff0c;以太網&#xff0c;IP...都是基于二進制格式的協議。 如何區別該協議是基于哪種格式的協議&#xff1f; 形如這種協議格式&#xf…

登錄接口中圖片驗證碼Tesseract-OCR識別Java腳本

項目上移植了研發部的產品&#xff0c;文檔不全&#xff0c;項目上驗證碼功能無法關閉&#xff0c;又要做接口/性能測試&#xff0c;開發不配合&#xff08;作為測試多么無奈&#xff09;&#xff0c;此方法識別命中率不高&#xff0c;僅作借鑒。 版本JDK11 import io.restass…