ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface
ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface
TBD
1. 汇总
ABP-Book Store Application中文讲解-汇总-CSDN博客
2. 前一章
ABP-Book Store Application中文讲解 - Part 8: Authors: Application Layer-CSDN博客
项目之间的引用关系。
目录
2. 更改AuthorModule
3. 定义菜单-Menu Definition
3.1. 更改path为/book-store的requiredPolicy
3.3 route.provider.ts完整代码
4. ABP generate service proxy
5. 提示信息本地化
6. Author列表和新增、编辑、删除
7. 继续学习
1. 利用Angular Cli创建authors
右击app文件夹,选择Open in Integrated Terminal打开Terminal页面,输入以下命令,敲回车:
ng generate module author --module app --routing --route authors
命令结束后,生成文件结构如下图所示:
2. 更改AuthorModule
/src/app/author/author.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';import { AuthorRoutingModule } from './author-routing.module';
import { AuthorComponent } from './author.component';
import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap';// new added
import { SharedModule } from '../shared/shared.module';// new added@NgModule({declarations: [AuthorComponent],imports: [CommonModule,SharedModule,// new addedAuthorRoutingModule,NgbDatepickerModule// new added]
})
export class AuthorModule { }
3. 定义菜单-Menu Definition
src/app/route.provider.ts
3.1. 更改path为/book-store的requiredPolicy
{path: '/book-store',name: '::Menu:BookStore',iconClass: 'fas fa-book',order: 2,layout: eLayoutType.application,requiredPolicy: 'BookStore.Books || BookStore.Authors',// 新增加|| BookStore.Authors}
3.2 新增path为/authors的菜单
{path: '/authors',name: '::Menu:Authors',// iconClass: 'fas fa-user',parentName: '::Menu:BookStore',order: 4,layout: eLayoutType.application,requiredPolicy: 'BookStore.Authors',// new added}
3.3 route.provider.ts完整代码
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,requiredPolicy: 'BookStore.Books || BookStore.Authors',// 新增加|| BookStore.Authors},{path: '/books',name: '::Menu:Books',// iconClass: 'fas fa-user',parentName: '::Menu:BookStore',order: 3,layout: eLayoutType.application,requiredPolicy: 'BookStore.Books',// new added},{path: '/authors',name: '::Menu:Authors',// iconClass: 'fas fa-user',parentName: '::Menu:BookStore',order: 4,layout: eLayoutType.application,requiredPolicy: 'BookStore.Authors',// new added}]);};
}
4. ABP generate service proxy
前置条件是需要保证Acme.BookStore.HttpApi.Host启动。
在angular根目录,然后ctrl+`新打开一个Terminal console,运行以下命令:
abp generate-proxy -t ng
生成完成后的目录结构如下图所示:
5. 提示信息本地化
打开Acme.BookStore.Domain.Shared,找到Localization/BookStore文件夹,编辑en.json和zh-Hans.json。添加内容如下:
en.json
"Menu:Authors": "Authors","Authors": "Authors","AuthorDeletionConfirmationMessage": "Are you sure to delete the author '{0}'?","BirthDate": "Birth date","NewAuthor": "New author","EditAuthor": "Edit author"
zh-Hans.json
"Menu:Authors": "作者管理","Authors": "作者","AuthorDeletionConfirmationMessage": "你确定要删除作者 '{0}'?","BirthDate": "生日","NewAuthor": "新建作者","EditAuthor": "编辑作者"
6. Author列表和新增、编辑、删除
/src/app/author/author.component.ts
此处新增、编辑界面可以参考Book那一章进行分开设计,即生成create-update-author component,然后动过NgbModal的open事件控制create-update-author的显示。
本篇文章不再介绍单独create-update-author component的方式,大家可以用这一个进行练手。
如果忘记怎么实现了,可以参考:(推荐使用这种方式)ABP-Book Store Application中文讲解 - Part 3: Creating, Updating and Deleting Books-CSDN博客
如果想要放在同一个组件里面,可参考ABP官网:
Web Application Development Tutorial - Part 9: Authors: User Interface | ABP.IO Documentation
7. 继续学习
ABP-Book Store Application中文讲解 - Part 10: Book to Author Relation-CSDN博客
相关文章:

ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface
ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface TBD 1. 汇总 ABP-Book Store Application中文讲解-汇总-CSDN博客 2. 前一章 ABP-Book Store Application中文讲解 - Part 8: Authors: Application Layer-CSDN博客 项目之间的引用关系。 目…...
鸿蒙开发修改版本几个步骤
鸿蒙开发修改版本几个步骤 比如:5.0.4(16)版本改为5.0.2(14)版本 一、项目下的build-profile.json5 "products": [{"name": "default","signingConfig": "default&qu…...

Hive自定义函数案例(UDF、UDAF、UDTF)
目录 前提条件 背景 概念及适用场景 UDF(User-Defined Function) 概念 适用场景 UDAF(User-Defined Aggregate Function) 概念 适用场景 UDTF(User-Defined Table-Generating Function) 概念 适…...

【学习笔记】Circuit Tracing: Revealing Computational Graphs in Language Models
Circuit Tracing: Revealing Computational Graphs in Language Models 替代模型(Replacement Model):用更多的可解释的特征来替代transformer模型的神经元。 归因图(Attribution Graph):展示特征之间的相互影响,能够追踪模型生成输出时所采用…...
3D视觉重构工业智造:解码迁移科技如何用“硬核之眼“重塑生产节拍
一、工业视觉的进化论:从CCD到3D相机的范式革命 在汽车冲压车间里,传统CCD相机正面临四大检测困局: 平面感知局限:二维视觉无法捕捉曲面工件形变环境适应性差:反光板件导致误检率超12%动态捕捉延迟:传送带…...
Elasticsearch中的刷新(Refresh)和刷新间隔介绍
在 Elasticsearch 中,刷新(Refresh) 是控制索引数据何时对搜索可见的机制,而 刷新间隔(Refresh Interval) 则是配置该机制执行频率的参数。理解这两个概念对于平衡搜索实时性与写入性能至关重要。 一、刷新(Refresh)的本质 Lucene 索引结构与搜索可见性Elasticsearch …...

STM32标准库-TIM定时器
文章目录 一、TIM定时器1.1定时器1.2定时器类型1.1.1 高级定时器1.1.2通用定时器1.1.3基本定时器 二、定时中断基本结构预分频器时器计时器时序计数器无预装时序计数器有预装时序RCC时钟树 三、定时器定时中断3.1 接线图3.2代码3.3效果: 四、定时器外部中断4.1接线图…...
【算法训练营Day05】哈希表part1
文章目录 哈希表理论基础有效的字母异位词两个数组的交集快乐数两数之和 哈希表理论基础 几个值得关注的知识点: hash表用于快速的判断元素是否存在(空间换时间)其原理就是将数据通过散列函数映射到bucket中,如果发生hash碰撞&a…...
CMap应用场景和例子
CMap 详解 CMap 是 MFC (Microsoft Foundation Classes) 库中的一个模板类,用于实现键值对的映射关系(类似哈希表或字典)。它提供了高效的数据存储和检索功能,适用于需要通过键快速查找值的场景。 基本模板参数 cpp 运行 tem…...

Kafka 如何保证顺序消费
在消息队列的应用场景中,保证消息的顺序消费对于一些业务至关重要,例如金融交易中的订单处理、电商系统的库存变更等。Kafka 作为高性能的分布式消息队列系统,通过巧妙的设计和配置,能够实现消息的顺序消费。接下来,我…...

【算法题】算法一本通
每周更新至完结,建议关注收藏点赞。 目录 待整理文章已整理的文章方法论思想总结模版工具总结排序 数组与哈希表栈双指针(滑动窗口、二分查找、链表)树前缀树堆 优先队列(区间/间隔问题、贪心 )回溯图一维DP位操作数学…...

Modbus转Ethernet IP赋能挤出吹塑机智能监控
在现代工业自动化领域,小疆智控Modbus转Ethernet IP网关GW-EIP-001与挤出吹塑机的应用越来越广泛。这篇文章将为您详细解读这两者的结合是如何提高生产效率,降低维护成本的。首先了解什么是Modbus和Ethernet IP。Modbus是一种串行通信协议,它…...
C++中如何遍历map?
文章目录 1. 使用范围for循环(C11及以上)2. 使用迭代器3. 使用反向迭代器注意事项 在C中, std::map 是一种关联容器,它存储的是键值对(key-value pairs),并且按键的顺序进行排序。遍历 std::m…...

什么是终端安全管理系统(终端安全管理软件2024科普)
在当今数字化迅速发展的时代,企业面临着越来越多的信息安全威胁。为了应对这些挑战,保障公司数据的安全性和完整性,终端安全管理系统(Endpoint Security Management System)应运而生。 本文将为您深入浅出地科普2024年…...
书籍转圈打印矩阵(8)0604
题目 给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3ÿ…...

【JVM】Java类加载机制
【JVM】Java类加载机制 什么是类加载? 在 Java 的世界里,每一个类或接口在经过编译后,都会生成对应的 .class 字节码文件。 所谓类加载机制,就是 JVM 将这些 .class 文件中的二进制数据加载到内存中,并对其进行校验…...
Elasticsearch中的自定义分析器(Custom Analyzer)介绍
在 Elasticsearch 中,自定义分析器(Custom Analyzer) 是一种可配置的文本处理组件,允许用户通过组合分词器(Tokenizer)、过滤器(Token Filter)和字符过滤器(Character Filter)来定义特定的文本分析逻辑。这使得 Elasticsearch 能够针对不同语言、业务场景或特殊需求,…...

《C++初阶之入门基础》【C++的前世今生】
【C的前世今生】目录 前言:---------------起源---------------一、历史背景二、横空出世---------------发展---------------三、标准立世C98:首个国际标准版本C03:小修订版本 四、现代进化C11:现代C的开端C14:对C11的…...

Apache APISIX
目录 Apache APISIX是什么? Lua Lua 的主要特点: Lua 的常见应用: CVE-2020-13945(Apache APISIX默认API Token导致远程Lua代码执行) 编辑Lua脚本解析 CVE-2021-45232(Apache APISIX Dashboard API权限绕过导致RCE) Apache …...

如何在 git dev 中创建合并请求
先将 自己的代码 推到 自己的远程的 分支上 在 创建 合并请求 根据提示 将 自己的远程的 源码 合并到 对应的分支上 然后 创建 合并请求 等待 对应的 人 来 进行合并就行...

基于nlohmann/json 实现 从C++对象转换成JSON数据格式
C对象的JSON序列化与反序列化 基于JsonCpp库实现C对象序列化与反序列化 JSON 介绍 JSON作为一种轻量级的数据交换格式,在Web服务和应用程序中广泛使用。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读…...
Java枚举类映射MySQL的深度解析与实践指南
Java枚举类映射MySQL的深度解析与实践指南 一、枚举类型映射的四大核心策略 1. 序数映射法(ordinal映射) 实现原理:存储枚举值的下标顺序 public enum OrderStatus {PENDING, // 存储为0PROCESSING, // 存储为1SHIPPED, //…...
代码训练LeetCode(21)跳跃游戏2
代码训练(21)LeetCode之跳跃游戏2 Author: Once Day Date: 2025年6月4日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 45. 跳跃游戏 II - 力扣(LeetCode)力扣 (LeetCode) 全球极客挚爱…...
【HarmonyOS 5】鸿蒙APP使用【团结引擎Unity】开发的案例教程
以下是基于团结引擎开发鸿蒙Unity应用的详细案例教程,整合环境配置、工程适配、跨语言通信等核心环节 一、环境配置(关键前置步骤) 1. 工具安装 工具版本要求作用团结引擎Hub≥1.2.3Unity鸿蒙项目构建管理DevEco Studio≥…...

《T/CI 404-2024 医疗大数据智能采集及管理技术规范》全面解读与实施分析
规范背景与详细信息 《T/CI 404-2024 医疗大数据智能采集及管理技术规范》是由中国国际科技促进会联合河南科技大学、河南科技大学第一附属医院、深圳市人民医院等十余家医疗机构与企业共同制定的团体标准,于2024年5月正式发布实施。该规范是我国医疗大数据领域的重要技术标准…...

国产三维CAD皇冠CAD在「金属压力容器制造」建模教程:蒸汽锅炉
面对蒸汽锅炉设计中复杂的曲面封头、密集的管板开孔、多变的支撑结构以及严格的强度与安全规范(如GB150、ASME等),传统二维设计手段往往捉襟见肘,易出错、效率低、协同难。国产三维CAD皇冠CAD(CrownCAD)凭借…...
Mysql避免索引失效
1. 在索引列上使用函数或表达式 问题描述 SELECT * FROM users WHERE YEAR(create_time) 2023; 如果create_time列上有索引,上述查询会导致索引失效,因为MySQL无法直接利用索引的B树结构。 解决方法 将函数应用于条件值,而不是列&#…...
python爬虫:Ruia的详细使用(一个基于asyncio和aiohttp的异步爬虫框架)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Ruia概述1.1 Ruia介绍1.2 Ruia特点1.3 安装Ruia1.4 使用案例二、基本使用2.1 Request 请求2.2 Response - 响应2.3 Item - 数据提取2.4 Field 提取数据2.5 Spider - 爬虫类2.6 Middleware - 中间件三、高级功能3.1 …...

C++中单例模式详解
在C中,单例模式 (Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这在需要一个全局对象来协调整个系统行为的场景中非常有用。 为什么要有单例模式? 在许多项目中,某些类从逻辑上讲只需要一个实…...

舆情监控系统爬虫技术解析
之前我已经详细解释过爬虫在系统中的角色和技术要点,这次需要更聚焦“如何实现”这个动作。 我注意到上次回复偏重架构设计,这次应该拆解为更具体的操作步骤:从目标定义到数据落地的完整流水线。尤其要强调动态调度这个容易被忽视的环节——…...