前言

命名规范对项目维护是很重要的. Angular 对项目的渗透很大的, 必须做好命名规范, 不然会很乱.

InjectionToken

InjectionToken = UPPER_SNAKE_CARE

const SERVICE_CONFIG = new InjectionToken('ServiceConfig');

variable name 用 UPPER_SNAKE_CARE

InjectionToken 的参数用 PascalCase 或者 UPPER_SNAKE_CARE

Attribute and Property

element attribute and property name = camelCase

angular.io example 有 camelCase 和 kebab-case,不过我看绝大部分都是用 camelCase 居多。

<bank-account bankName="RBC" account-id="4747"></bank-account>

Event

event handler method

如果没有一个具体的执行名字,请不要放 (click)="onClick()" 放 "handleClick()"。

ValidationErrors

ValidationErrors key 用 camelCase

from Angular Docs

不过 built-in 的 minLength 和 maxLength 的 key 是 lowercase 'minlength' 和 'maxlength' 哦,奇葩。

Directive Selector

Angular CDK Derective selector 用 kebab-case 还是 camelCase?

CdkScrollable 指令 kebab-case 和 camelCase 都能接受。

CdkVirtualScrollableElement 指令只能接受 camelCase

CdkHeaderCell 指令只能接受 kebab-case。

显然,它们没有统一规范。不过通常 element 是用 kebab-case,attribute 用 camelCase。遇到例外比如 (th[cdk-header-cell]) 也没办法,只能 follow 它。

组件 attribute selector

通常组件是 tag,指令通常是 attribute。

<my-component myDirective></my-component>

但这也只是通常。

许多情况下组件也可能是 attrbute,这种情况下要用 kebab-case 还是 camelCase 呢?

我觉得像 Angular Material Button 这样使用 kebab-case 挺好的。

当组件的 selector 是 attribute 时使用 kebab-case。

@HostBinding and @HostListener Decorator

官网的 guide 是叫我们尽量用 @HostBinding Decorator 对比在 @Directive host property

但是 Angular Material 一直没有 follow 这个 guide

如今 Angular 正在去 Decorator 化,所以我建议使用 @Directive host property。

Animation CSS Property

依据官网教程,使用 camelCase

我觉得 camelCase 比 kebab-case 好,因为 Web Animation API 是只能使用 camelCase,这样比较统一。

Animation Trigger Name

下面这些是从 Angular Material 源码中抄出来的 Trigger Name:

  • detailExpand
  • panelAnimation
  • state
  • transformPanel
  • fadeInCalendar
  • dialogContainer
  • indicatorRotate
  • bodyExpansion
  • transitionMessages
  • transformMenu
  • fadeInItems
  • transformPanelWrap
  • transformPanel
  • transform
  • indicator
  • leftPointer
  • rightPointer
  • arrowOpacity
  • arrowPosition
  • allowChildren
  • horizontalStepTransition
  • verticalStepTransition
  • translateTab

没有统一规范,但大部分有 2 个特性

  1. 对象

    比如 panel, Calendar, dialog, body, Messages, Menu, Items 等等

    有时候在前面,有时候在后面

  2. 动作

    比如 Expand, transform, fadeIn, Rotate 等等

    有时候在前面,有时候在后面,有时候只有对象没有动作。

当然还有一些比较直接的:panelAnimation,state。

我个人的规范是:

  1. 如果这个 trigger 会被用在多个 element 上,那取个动作名字就好了。

  2. 如果是用在指定 element 上,最好配个对象名字。

  3. 如果动作不好取,就直接叫 panelAnimation 或者 panelAnimationState 就好了。

x, y, top, right, bottom, left, vertical, horizontal

vertical 和 horizontal 的抽象叫 orientation (follow Angular Material)

x, y 抽象叫 axis (轴的意思,follow Angular Material)

top, right, bottom, left 抽象叫 position 或 direction (follow Angular Material)

exportAs

参考 Angular Material

指令和组件都可能会有 exportAs,

exportAs 用的是 camelCase,通常名字就和 element tag 或 attribute 一样。

String literal union types

参考 Angular Material 源码

各种 case styles 都有,但绝大多数是 lowercase single word。

通常这些 string literal 会被用在 property 和 class name。

property 是 camelCase,class name 是 kebab-case 所以用这 2 种 case styles 就挺安全的了。

如果遇到冲突,我们可以做一些 conversion。

像这样:

//#region combineToCamelCase
export function combineToCamelCase<T1 extends string, T2 extends string>(
v1: T1,
v2: T2,
): `${Uncapitalize<T1>}${Capitalize<T2>}`;
export function combineToCamelCase<T1 extends string, T2 extends string, T3 extends string>(
v1: T1,
v2: T2,
v3: T3,
): `${Uncapitalize<T1>}${Capitalize<T2>}${Capitalize<T3>}`;
export function combineToCamelCase<T1 extends string, T2 extends string, T3 extends string, T4 extends string>(
v1: T1,
v2: T2,
v3: T3,
v4: T4,
): `${Uncapitalize<T1>}${Capitalize<T2>}${Capitalize<T3>}${Capitalize<T4>}`;
export function combineToCamelCase(...values: string[]): string {
return values
.map((value, index) =>
index === 0
? value.substring(0, 1).toLowerCase() + value.substring(1)
: value.substring(0, 1).toUpperCase() + value.substring(1),
)
.join('');
}
//#endregion //#region combineToPascalCase
export function combineToPascalCase<T1 extends string, T2 extends string>(
v1: T1,
v2: T2,
): `${Capitalize<T1>}${Capitalize<T2>}`;
export function combineToPascalCase<T1 extends string, T2 extends string, T3 extends string>(
v1: T1,
v2: T2,
v3: T3,
): `${Capitalize<T1>}${Capitalize<T2>}${Capitalize<T3>}`;
export function combineToPascalCase<T1 extends string, T2 extends string, T3 extends string, T4 extends string>(
v1: T1,
v2: T2,
v3: T3,
v4: T4,
): `${Capitalize<T1>}${Capitalize<T2>}${Capitalize<T3>}${Capitalize<T4>}`;
export function combineToPascalCase(...values: string[]): string {
return values.map(value => value.substring(0, 1).toUpperCase() + value.substring(1)).join('');
}
//#endregion //#region combineToKebabCase
export function combineToKebabCase<T1 extends string, T2 extends string>(
v1: T1,
v2: T2,
): `${Lowercase<T1>}-${Lowercase<T2>}`;
export function combineToKebabCase<T1 extends string, T2 extends string, T3 extends string>(
v1: T1,
v2: T2,
v3: T3,
): `${Lowercase<T1>}-${Lowercase<T2>}-${Lowercase<T3>}`;
export function combineToKebabCase<T1 extends string, T2 extends string, T3 extends string, T4 extends string>(
v1: T1,
v2: T2,
v3: T3,
v4: T4,
): `${Lowercase<T1>}-${Lowercase<T2>}-${Lowercase<T3>}-${Lowercase<T4>}`;
export function combineToKebabCase(...values: string[]): string {
return values.map(value => value.toLowerCase()).join('-');
}
//#endregion

Change or Changes?

Angular Material 在写 @Output 时是用 xxxChange

但 xxxChanges 也有很多地方会使用哦

Angular 18+ 高级教程 – Naming Conversion的更多相关文章

  1. Siki_Unity_2-9_C#高级教程(未完)

    Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...

  2. Pandas之:Pandas高级教程以铁达尼号真实数据为例

    Pandas之:Pandas高级教程以铁达尼号真实数据为例 目录 简介 读写文件 DF的选择 选择列数据 选择行数据 同时选择行和列 使用plots作图 使用现有的列创建新的列 进行统计 DF重组 简 ...

  3. ios cocopods 安装使用及高级教程

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  4. 【读书笔记】.Net并行编程高级教程(二)-- 任务并行

    前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...

  5. 【读书笔记】.Net并行编程高级教程--Parallel

    一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...

  6. 分享25个新鲜出炉的 Photoshop 高级教程

    网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...

  7. 展讯NAND Flash高级教程【转】

    转自:http://wenku.baidu.com/view/d236e6727fd5360cba1adb9e.html 展讯NAND Flash高级教程

  8. Net并行编程高级教程--Parallel

    Net并行编程高级教程--Parallel 一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控 ...

  9. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  10. Angular CLI 使用教程指南参考

    Angular CLI 使用教程指南参考 Angular CLI 现在虽然可以正常使用但仍然处于测试阶段. Angular CLI 依赖 Node 4 和 NPM 3 或更高版本. 安装 要安装Ang ...

随机推荐

  1. KubeCube 用户管理与身份认证

    前言 KubeCube (https://kubecube.io) 是由网易数帆近期开源的一个轻量化的企业级容器平台,为企业提供 kubernetes 资源可视化管理以及统一的多集群多租户管理功能.K ...

  2. 使用了条件三元运算符来判断 this.temp.id 是否存在且 mt_qty 是否已被赋值

    mt_qty: (this.temp.id && this.temp.mt_qty) ? this.temp.mt_qty : event.wo_wip,在这个修正后的代码中,使用了条 ...

  3. RSA加解密,Java和C#互通

    一.使用场景 Java作为服务端生成一对公私钥,C#作为客户端拥有公钥. RSA算法这里就不多做介绍了,可参考RSA算法介绍 二.规范 公私钥的形式都是base64字符串 通过公私钥加密后的字符串也是 ...

  4. 手把手帮助你搭建属于自己的个人博客,使用cervel部署,无需后端

    1.项目简介 项目使用了vue+elementUI技术栈,通过读取本地md文件实现博客文章的展示,使用vercel实现自动化部署,纯前端项目,无需后端 第一步:下载源码 仓库地址: github:ht ...

  5. ADB:移动端专项测试必备神器!!

    01 Android调试桥 (adb) Android调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信. adb命令可用于执行各种设备操作(例如安装和调试应用),并提供对Unix ...

  6. 关于visual studio的一个bug

    本人初学链表,如有错误多多包涵 快马加鞭,这期只写一个问题.我好像在vs里面发现了一个bug 不管是vs2022还是vs2010都无法正常运行.关于cin.string.链表的问题 #include& ...

  7. java中的Context

    在java编程中,上下文(Context)是指程序运行时的环境和状态的集合.包括了类对象变量方法等运行时的相关数据 在类中,我们可以通过this获取当前类的变量.方法的上下文, 例如getset方法: ...

  8. CentOS安装RustDesk自建服务器

    一.安装node.js 1.下载并解压 [root@VM-8-2-centos src]# cd /usr/local # 下载node文件 [root@VM-8-2-centos local]# w ...

  9. AI未来应用的新领域:具有领域知识的专属智能拼音输入法 —— 医生专属的智能输入法

    本人上个月去辽宁中医看了些小毛病,在和医生交流的时候随便小聊一下,其中一个主要的话题就是"医生是否需要练习五笔".众所周知,医生的主要工作是看病,而需要使用输入法打字写病历只是看病 ...

  10. 在本地主机使用anaconda3 安装MindSpore环境——教程(GPU版本)

    创建MindSpore虚拟环境 创建虚拟环境并安装依赖库 conda create -n mindspore python=3.7.5 cudatoolkit=10.1 cudnn=7.6.5 gmp ...