HTML规范
1、语义化标签
- 列表使用
ul li
- 文字使用
p span em cite
等标签 - 标题使用
h1 h2
等标签 - 布局使用
section aside header footer article
等 HTML5 布局标签
2、自定义标签
使用自闭合标签的写法 小写加下划线
xml
<template>
<my-owner-components />
</template>
3、多特性分行写
为提高可读性 组件应用时换行 按照 ref、class、传入、传出
顺序书写
xml
<template>
<my-components
ref="myComponents"
class="home-my-components"
:data="data"
@changeHandle="changeHandle"
/>
</template>
4、行内使用表达式
在模版中 简单情况使用表达式 复杂情况使用计算属性或函数
xml
<template>
<!-- 简单情况 -->
<div v-show="data.type === 1">
...
</div>
<!-- 复杂情况 -->
<div v-show="getTypeShow(data)">
...
</div>
</template>
<script>
export default {
methods: {
/**
* ***显示判断
* @param data **
*/
getTypeShow(data) {
return data.type === 1 && ...
}
}
}
</script>
5、避免重复
避免过多重复代码 果超过三行类似的代码 配置数据再循环遍历
6、代码嵌套
根据元素嵌套规范 每个块状元素独立一行 内联元素可选
xml
<template>
<!-- 情况1 -->
<div>
<h1></h1>
<p></p>
<p><span></span><span></span></p>
</div>
<!-- 情况2 -->
<div>
<h1></h1>
<p></p>
<p>
<span></span>
<span></span>
</p>
</div>
</template>
7、活用 v-if v-show
v-show
不会改变dom树 不会导致重新渲染 用于频繁的切换显示隐藏
v-if
会改变dom树 会导致重新渲染 用于只控制一次显示隐藏
8、注释规范
xml
<template>
<!-- 标签注释 -->
<div>
...
</div>
<!-- 组件注释 -->
<my-owner-components />
</template>
CSS规范
1、避免使用
- 避免使用标签选择器 因为在 Vue 中 特别是在局部组件 使用标签选择器效率特别低 损耗性能 建议需要的情况直接定义 class
- 非特殊情况下 禁止使用 ID 选择器定义样式(有 JS 逻辑的情况除外)
- 避免使用important选择器
- 避免大量的嵌套规则 控制在3级之内 对于超过4级的嵌套 考虑重写或新建子项
- 避免使用ID选择器及全局标签选择器防止污染全局样式
2、推荐使用
- 提取公用样式进assets文件styles里 按模块/功能区分
- 使用
scoped
关键字 约束样式生效的范围 - 可复用属性尽量抽离为页面变量 易于统一维护
- 使用混合(mixin)根据功能定义模块 然后在需要使用的地方通过
@include
调用 避免编码时重复输入代码段
3、书写顺序
CSS 属性书写顺序 先决定定位宽高显示大小 再做局部细节修饰
定位属性(或显示属性 display) => 宽高属性 => 边距属性(margin padding) => 背景 颜色 字体等修饰属性的定义 这样定义为了更好的可读性 让别人只要看一眼就能在脑海中浮现最终显示的效果
css
.class-name {
position: fixed;
top: 100px;
left: 0;
right: 0;
bottom: 0;
display: block;
width: 100%;
height: 100%;
margin: 10px;
padding: 10px;
background-color: red;
border-radius: 2px;
font-size: 14px;
color: #000;
line-height: 1.42;
}
4、样式覆盖
组件内部需要覆盖UI框架样式 必须在最外层组件加类名
xml
<template>
<div class="input-container">
<el-input class="name-input"></el-input>
</div>
</template>
<style lang="scss">
.input-container {
.name-input {
.el-input__inner {
font-size: 16px;
}
}
}
</style>
5、注释规范
以 / 注释内容 /
格式注释 前后空格 嵌套子类需要一个回车分割开
css
/* 注释内容 */
.class-name {
width: 20px;
/* 这里需要换行 */
.class-name-l {
color: blue
}
}
JS规范
1、用法规范
- 在vue-cli 脚手架使用架自带的指向 src 开发目录的 '@' 符号引入文件资源
- 使用
template
或计算属性规避v-if
和v-for
用在一起 - 统一使用单引号
- 坚持单一原则 函数内仅做该函数应该做的 尽量避免通过传入标记控制不同行为
- 优先考虑三目运算符 但不要写超过3层的三目运算符
- 对于无用代码必须及时删除 例如:一些调试的
console
语句、无用的弃用功能代码 - 请求数据的方法使用try catch 错误捕捉 注意执行回调
2、组件顺序规范
js
<script>
export default {
name: 'ExampleName', // 这个名字推荐:大写字母开头驼峰法命名
props: {}, // Props 定义
components: {}, // 组件定义
directives: {}, // 指令定义
mixins: [], // 混入 Mixin 定义。
data () { // Data 定义。
return {
dataProps: '' // Data 属性的每一个变量都需要在后面写注释说明用途,就像这样
}
},
computed: {}, // 计算属性定义。
watch: {}, // 属性变化监听器。
created () {}, // 生命钩子函数,按照他们调用的顺序。
mounted () {}, // 挂载到元素。
activated () {}, // 使用 keep-alive 包裹的组件激活触发的钩子函数。
deactivated () {}, // 使用 keep-alive 包裹的组件离开时触发的钩子函数
methods: { // 组件方法定义。
publicbFunction () {} // 公共方法的定义,可以提供外面使用
_privateFunction () {} // 私有方法,下划线定义,仅供组件内使用。多单词,注意与系统名字冲突!
}
}
</script>
3、注释规范
函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识,它的作者, 依赖关系和兼容性信息。
- 单行注释:双斜线后应跟空格,且缩进与上下文的代码保持一致;或在行尾注释,在行尾依然需要左右空格
js
// 注释
const userID = 24
const userID = 12 // 注释
- 多行注释:一般用于注释难以理解的、可能存在错误的、逻辑强的代码,且缩进一致
js
/*
* 针对下方代码的说明
* 第一行太长写第二行
*/
const aa = 1
- 函数注释:写明传入参数名称、类型推荐完整注释以下格式
js
/**
* @Description 加入购物车
* @Author luochen_ya
* @Date 2024-03-13
* @param {Number} goodId 商品id
* @param {Array<Number>} specs sku规格
* @param {Number} amount 数量
* @param {String} remarks 备注
* @returns <Promise> 购物车信息
*/
apiProductAddCard = (goodId, specs, amount, remarks) => {
return axios.post('***', { goodId, specs, amount, remarks })
}
- 文件注释:写明文件描述
js
/**
* @Description: 文件描述
* @Author: luochen_ya
* @Date: 2024-03-13
*/
命名规范
1、目录命名
按照小驼峰命名 首字母小写
- 项目文件夹:projectName
- 样式文件夹:css / scss
- 脚本文件夹:js
2、图片命名
图片就是img开头 图标就是icon开头
- img_功能_模块_编号
- icon_功能_模块_编号
3、文件命名
- 按照小驼峰命令 英文单词过长或超出2个以上 可缩略至前四位 列如:
comming_soon.png
等 - 有复数含义 采用复数命名 列如:
minixs styles images icons
等 - 静态资源命名格式为小写 + 下划线 列如:
icon_arrow.png img_logo.png
等 - 组件命名为小驼峰 公用组件加上gd前缀 列如:
gdOwnerComponents
等
4、方法命名
method 方法命名不同于文件命名,尽量完整英文命名,语义表达需完整清楚
- 按照小驼峰命名法 可使用常见动词约定
can
: 判断是否可执行某个动作 函数返回一个布尔值true
可执行false
不可执行has
: 判断是否含有某个值 函数返回一个布尔值true
含有此值false
不含有此值is
: 判断是否为某个值,函数返回一个布尔值true
为某个值false
不为某个值get
: 获取某个值 函数返回一个非布尔值set
: 设置某个值 无返回值或者返回是否加载完成的结果
- 语义化英文命名 仅组件内部使用方法前加上_(下划线)区分
js
<script>
export default {
methods: { // 组件方法定义
publicbFunction () {} // 公共方法的定义 可以提供外面使用
_privateFunction () {} // 私有方法 下划线定义 仅供组件内使用
}
}
</script>
- 引入组件:首字母大写的驼峰法命名
js
import MyOwnerComponents from '@/components/MyOwnerComponents'
- 变量:使用驼峰式命名 优先使用
let
const
避免使用var
js
let userName = 'luochen_ya'
const userInfo = {
name: 'luochen_ya',
age: 24
}
- 常量:字母全部大写 以下横线
_
划分
js
const Constant = {
// 公用状态
COMMON_STATUS_ENABLE = 1, // 启用
COMMON_STATUS_DISABLE = 2, // 停用
}
5、样式命名
class命名以小写字母开头 小写字母、中划线和数字组成 以下是一些常用到的 class的名字
- 包裹层: .xxx-wrap
- 列表: .xxx-list
- 列表项: .xxx-list-item
- 左边内容: .xxx-left
- 中间内容: .xxx-middle
- 右边内容: .xxx-right
- 某个页面:.xxx-page
6、常用词
- 常用动词
get
=> 取值set
=> 给值add
=> 新增remove
=> 移除show
=> 显示hide
=> 隐藏view
=> 查看browse
=> 浏览edit
=> 修改save
=> 保存delete
=> 删除find
=> 查询undo
=> 撤销redo
=> 重做clean
=> 清除index
=> 索引observe
=> 观察send
=> 发送receive
=> 接收refresh
=> 刷新synchronize
=> 同步
- 常用缩写
object
=>obj
array
=>arr
function
=>fn
message
=>msg
button
=>btn
工程结构
1、目录构建
md
├── api 所有api接口
├── assets 靜態資源
│ ├── fonts 全局公用字体
│ ├── icons 全局公用图标
│ ├── images 全局公用图片
│ └── styles 全局公用样式
├── components 公用組件
│ ├── base 基础组件
│ └── business 业务组件
├── constants 常量 统一管理
├── locales 多语言管理
├── plugins 插件 统一管理
├── router 路由 统一管理
│ └── index.js
├── store vuex 统一管理
│ ├── modules
│ ├── getters.js
│ └── index.js
├── utils 工具函数 统一管理
├── views 视图目录(所有业务逻辑的页面)
2、代码风格
可以直接使用eslint 强制统一代码规范 还能规避一些语法错误 或者按照以下自己定义的去配置eslint来使用
以下是个人习惯 仅供参考
- 首行缩进2空格
- js代码去除分号
- html代码超出255字符一行进行换行操作
- js代码统一使用单引号或双引号