【前端开发必备小技巧】前端代码规范Vue篇

文章目录

  • 🟢 前端代码规范
  • 🟢 一、前端代码规范Vue篇
    • 👉1、Vue编码基础
        • 👉1.1、组件规范
        • 👉1.2、模板中使用简单的表达式
        • 👉1.3、指令都使用缩写形式
        • 👉1.4、 标签顺序保持一致
        • 👉1.5、必须为 v-for 设置键值 key
        • 👉1.6、v-show 与 v-if 选择
        • 👉1.7、script 标签内部结构顺序
        • 👉1.8、Vue Router 规范
    • 👉2、Vue 项目目录规范
        • 👉2.1、基础
        • 👉2.2、使用 Vue-cli 脚手架
        • 👉2.3、 目录说明
        • 👉2.4、注释说明
        • 👉2.5、其他
  • ✒️总结


🟢 前端代码规范

规范的目的是为了编写高质量的代码,让你的团队成员每天得心情都是愉悦的,大家在一起是快乐的。
引自《阿里规约》的开头片段:
…现代软件架构的复杂性需要协同开发完成,如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路行驶。对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。

🟢 一、前端代码规范Vue篇

在这里插入图片描述

👉1、Vue编码基础

Vue 项目规范以 Vue 官方规范https://v2.cn.vuejs.org/v2/style-guide/中的A规范为基础,在其上面进行项目开发,故所有代码均遵守该规范。

请仔仔细细阅读 Vue官方规范,切记,此为第一步。

👉1.1、组件规范
  1. 组件名为多个单词
    组件名应该始终是多个单词组成(大于等于 2),且命名规范为KebabCase格式。
    这样做可以避免跟现有的以及未来的 HTML 元素相冲突,因为所有的 HTML 元素名称都是单个单词的。

正例:

export default {name: 'TodoItem',// ...
}

反例:

export default {name: 'Todo',// ...
}
export default {name: 'todo-item',// ...
}
  1. 组件文件名为 pascal-case 格式

正例:

components/
|- my-component.vue

反例:

components/
|- myCoaponent.vue
|- MyCoaponent.vue
  1. 基础组件文件名为 base 开头,使用完整单词而不是缩写

正例:

components/
|-base-button.vue
|-base-table.vue
|-base-icon.vue

反例:

components/
|- MySutton.vue
|- VueTable.vue
|- Icon.vue
  1. 和父组件紧密属合的子组件应该以父组件名作为前缀命名

正例:

components/
|- todo-list.vue
|- todo-list-item.vue
|- todo-list-item-button.vue
|- user-profi1e-options.vue(完整单词)

反例:

components/
|- TodoList.vue
|- TodoItem. vue
|- TodoButton.vue
|- UProfopts.vue(使用了缩写)
  1. 在Template 模版中使用组件,应使用 PascalCase 模式,并且使用自闭合组件。

正例:

<1--在单文件组件、字符串模板和JSX中-->
<myComponent />
<Rom><table :colum="data"/></Rom>

反例:

<my-component /><row><table :column="data"/></row>
  1. 组件的 data 必须是一个函致
    当在组件中使用 data 属性的时候 (除了 new Vue 外的任何地方),它的值必须是返回一个对象的函数。 因为如果直按是一个对象的话,子组件之间的属性值会互相影响,

正例:

export default {name: 'App',data(){return{title:'我是一个标题',}},
}

反例:

export default {name: 'App',data:{title:'我是一个标题',},
}
  1. Prop 定义应该尽量详细
    • 必须使用 camelCase 驼峰命名
    • 必须指定类型
    • 必须加上注释,表明其含义
    • 必须加上 required 或者 default,两者二选其一
    • 如果有业务需要,必须加上 validator 验证

正例:

export default {name: "HelloWorld",props: {//组件状态,用于控制组件的颜色status: {type: String,required: true,validator: function (value) {return ["succ", "info", "error"].indexof(value) !== -1;},},// 用户级别,用于显示皇冠个效userLevel: {type: String,required: true,},},
};
  1. 为组件样式设置作用域

正例:

<template><div class="hello">HelloWorld</div>
</template>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.hello {color: white;font-size: 22px;margin: 10px 0 0;
}
</style>

反例:

<template><div class="hello">HelloWorld</div>
</template>
<!-- 没有scoped 特性-->
<style >
.hello {color: white;font-size: 22px;margin: 10px 0 0;
}
</style>
  1. 如果特性元素较多,应该主动换行

正例:

      <MyComponent foo="a" bar="b" baz="c"></MyComponent>

反例:

     <MyComponent foo="a" bar="b" baz="c"></MyComponent>
👉1.2、模板中使用简单的表达式

组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法。复杂表达式会让你的模极变得不那么声明式。我们应该尽量描述应该出现的是什么,而非如何计算那个值。而且计算属性和方法使得代码可以重用。
正例:

<template><div >{{ normalizedFullName }}</div>
</template><script>
export default {name: "HelloWorld",computed:{normalizedFullName:function(){return this.fullName.split(' ').map((word)=>{return word[0].toUpperCase()+word.split(1)}).join(' ')}}
};
</script>

反例:

<template><div >{{ fullName.split(' ').map((word)=>{return word[0].toUpperCase()+word.split(1)}).join(' ')}}</div>
</template>
👉1.3、指令都使用缩写形式

指令推荐都使用缩写形式,(用 : 表示v·bind: ,用 @ 表示 v-on, 用#表示 v-slot:)
正例:

   <input@input="onInput"@focus="onFocus">

反例:

   <inputv-on:input="onInput"@focus="onFocus">
👉1.4、 标签顺序保持一致

单文件组件应该总是让标签顺序保持为
正例:

<template></template><script></script><style scoped></style>

反例:

<template></template><style scoped></style><script></script>
👉1.5、必须为 v-for 设置键值 key
👉1.6、v-show 与 v-if 选择

如果运行时,需要非常颜繁地切换,使用v·show;如果在运行时,条件很少改变,使用v-if。

👉1.7、script 标签内部结构顺序

components>props>data>compued>watch>filter>钩子函数(钩子函数按其执行顺序)>methods

👉1.8、Vue Router 规范
  1. 页面跳转数据传递使用路由参数
    页面跳转,例如A页面跳转到B页面,需要将A页面的数据传递到B页面,推使用路由参数进行传参,而不是将需要传递的数据保存 vuex,然后在 B页面取出 vuex的数据,因为如果在 B页面刚新会导致 vuex 数据丢失
    正例:
let id='1113'
this.$router.push({name:'userDetail',query:{id:id}
})
  1. 使用路由懒加载(延迟加载)机制
{path: "/Login",name: "Login",// 登录页component: () => import('@/components/Login/Login.vue'),
}, 

3.router 中的命名规范
path、childrenPoints命名规范采用kebab-case命名规范(尽量vue文件的目录结构保持一致,因为目录、文件名都是kebab-case,这样很方便找到对应的文件)

 {path:'/system/system-list',// 系统列表name:'SystemList',component:()=>import('../components/system/system-list.vue')}

4.router 中的 path 命名规范
path除了采用kebab-case命名规范以外,必须以/开头,即使是children里的path也要以/开头。如下示例
目的:
经常有这样的场景:某个页面有问题,要立刻找到这个文件,如果不用以/开头,path为parent和children组成的,可能经常需要在router文件里搜索多次才能找到,而如用以/开头,则能立刻搜索到对应的组件

{path: '/',// 首页name: 'home',component: () => import('../components/home/home.vue'),redirect: '/panel',// 重定向到看板页children:[{path:'/panel',// 大屏面板name:'Panel',component:()=>import('../components/panel/panel.vue'),meta: {bg: 'bg'},// 背景图},{path:'/system',// 系统设置name:'System',component:()=>import('../components/system/system.vue')}]
}

👉2、Vue 项目目录规范

👉2.1、基础

vue 项目中的所有命名一定要与后端命名统一。
比如权限:后端 privilege,前端无论 router,store,api等都必须使用 privielege 单词!

👉2.2、使用 Vue-cli 脚手架

使用 vue·cli3 来初始化项目,项目名按照上面的命名规范

👉2.3、 目录说明

目录名按照上面的命名规范,其中components 组件用大写驼峰,其余除components 组件目录外的所有目录均便用 kebab-case 合名。

src源码目录

 |-- api 				所有api接口|-- assets 			静志资源,images,icons,styles等|-- components			公用组件|-- config				配置信息|-- constants			常量信息,项目所有Enun,全局常量等|-- directives			自定义指令|-- filters			过滤器,全局工具|-- datas				模拟教据,临时存放|-- lib				外部引用的插件存放及修改文件|-- mock				模拟接口,临时存放|-- plugins			插件,全局使用|-- router				路由,统一管理|-- store				vuex,统一管理|-- themes				自定义样式主题|-- views				视图目录|  |-- role				role模块名|  |-- role-list.vue		role列表页面|  |-- role-add. vue		role新建页面|  |-- role-update.vue		role更新页面|  |-- index.less			role模块样式|  |-- components			role模块通用组件文件夹|  |-- employee			employee模块

1. api 目录

  • 文件、变量命名要与后端保持一致。
  • 此目录对应后端 API 接口,按照后端一个controller 一个api.js文件。若项目较大时,可以按照业务划分子目录,并与后端保持一致。
  • api中的方法名字要与后端 api url 尽量保持语义高度一致性。
  • 对于 api中的每个方法要添加注释,注释与后端swagger 接口文档保持一致。

正例:

后端ulr:EmployeeController.java

/employee/add
/employee/delete/id
/employee/update

前端:employee.js

//添加员工
addEmployee:(data)=>{rerutn postAxios('/employee/add',data)
}
//更新员工
updateEmployee:(data)=>{rerutn postAxios('/employee/update',data)
}
//删除员工
deleteEmployee:(employeeId)=>{rerutn postAxios('/employee/delete/'+employeeId)
}

2. assets目录
assels 为静态资源,里面存放 images,styles,icons等静态资源,静态资源命名格式为 kebab-case

|-- assets
|-- images
|  |-- background-color.png
|  |-- upload-header.png
|-- styles

3.components目录
此目录应按照组件进行目录划分,目录命名为KebabCase,组件命名规则也为KebabCase

|--  error-log
|  |--index.vue
|  |-- index.less
|-- markdow-editor
|  |--index.vue
|  |--index.js
|-- kebab-case

4.constants 目录
此目录存放项目所有常量,如果常量在vue 中使用,请使用vue-enum 插件(https://gitee.com/lab1024/vue-enum)
vue-enum
目录结构:

|--  index.js
|--  role.js
|--  employee.js

例子:index.js

export let enumInfo = {SOURCE_IN_TYPE: {PURCHASE_IN: {value: 1,desc: '采购入库'},REFUND_IN: {value: 2,desc: '退货入库'},CHECK_IN: {value: 3,desc: '盘点入库'},CONFIRM_IN: {value: 4,desc: '取消订单入库'}}
}

5.router与store 目录

这两个目录一定要将业务进行拆分,不能放到一个文件里。
router 尽量按照 views 中的结构保持一致
srore 按照业务进行拆分不同的正文件

6.views 目录

  • 命名要与后端、router、api等保持一致
  • components 中组件要使用 Pascalcase 规则
|-- views				视图目录
|  |-- role				role模块名
|  |-- role-list.vue		role列表页面
|  |-- role-add. vue		role新建页面
|  |-- role-update.vue		role更新页面
|  |-- index.less			role模块样式
|  |-- components			role模块通用组件文件夹
|  |  |-- role-header.vue			role头部组件
|  |  |-- role-modal.vue			role弹出窗组件
|  |-- employee			employee模块
|  |-- behavior-log		行为日志log模块
|  |-- code-generator	代码生成器模块
👉2.4、注释说明

整理必须加注释的地方

  • 公共组件使用说明
  • api 目录的接口js 文件必须加注释
  • store 中的 state,mutation, action等必须加注释
  • vue 文件中的template 必须加注释,若文件较大添加 slart end 注释
  • vue 文件的 methods,每个method 必须添加注释
  • vue 文件的 data,非常见单词要加注释
👉2.5、其他
  1. 尽量不要手动操作 DOM
    因使用 vue 框架,所以在项目开发中尽量使用 vue 的数据驱动更新 DOM,尽量(不到万不得已)不要手动操作DOM,包括:增删改 dom 元素、以及更改样式、添加事件等
  2. 删除无用代码
    因使用了 git/svn 等代码版本工具,对于无用代码必须及时删除,例如:一些调试的console 语句、无用的弃用功能代码.

✒️总结

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kotlin设计模式】Kotlin实现适配器模式

前言 适配器模式(Adapter Pattern)的核心将某个类的接口转换成客户端期望的另一个接口表示&#xff0c;使得客户端能够通过自己期望的接口与不兼容的类进行交互。适配器模式有三种实现方式&#xff0c;分别是类适配器模式、对象适配器模式、 接口适配器模式。 我们假设有个视频…

3D Tiles的4x4的仿射变换矩阵

前言 项目需要&#xff0c;使用Cesium技术&#xff0c;把STL格式模型加载进去。 一、格式转换 第一步&#xff0c;先将STL文件转换为glTF格式 第二步&#xff0c;将glTF文件转换为3D Tiles格式&#xff0c;使用Cesium ion 二、矩阵整体结构 这个矩阵是一个4x4的仿射变换矩阵&…

LeetCode题练习与总结:单词搜索Ⅱ--212

一、题目描述 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻…

中智科学技术评价研究中心与中企数研究院实现全面合作

8月29日&#xff0c;中智科学技术评价研究中心与《中国企业报》集团数字化发展研究院在北京顺喜山庄成功举办“数字经济GBC生态系统管理平台”项目实施落地座谈会及研究院高层管理集训班&#xff0c;并签署了项目合作协议。此次合作标志着双方将在“数字中国发展战略”的大背景…

人工智能领域正经历模型规模变革,小型语言模型(SLM)崛起,挑战“规模至上”观念。

在人工智能领域&#xff0c;一场关于模型规模的深刻变革正在悄然发生。长久以来&#xff0c;科技巨头们热衷于庞大语言模型&#xff08;LLM&#xff09;的开发竞赛&#xff0c;但如今&#xff0c;小型语言模型&#xff08;SLM&#xff09;正以其独特的优势逐步崭露头角&#xf…

WordNet介绍——一个英语词汇数据库

传统语义知识库最常见的更新方法是依赖人工手动更新&#xff0c;使用这种更新方法的语义知识库包括最早的 WordNet、FrameNet和 ILD&#xff0c;以及包含丰富内容的 ConceptNet和 DBPedia。此类语义知识库的特点是以单词作为语义知识库的基本构成元素&#xff0c;以及使用预先设…

Linux安装Hadoop(单机版)详细教程

目录 一、JDK安装 1、下载JDK安装包 2、解压下载的JDK安装包 3、移动并重命名JDK包 4、配置Java环境变量 5、验证安装是否成功 二、Hadoop安装 1、下载Hadoop安装包 2、解压Hadoop安装包 3、配置Hadoop环境变量 4、修改配置文件 5、验证Hadoop是否安装成功 三&…

代码随想录——回文子串(Leetcode 647)

题目链接 我的题解&#xff08;双指针&#xff09; 思路&#xff1a; 当然&#xff0c;以下是对您提供的代码的解释&#xff1a; class Solution {public int countSubstrings(String s) {// 初始化回文子字符串的数量int count 0;// 遍历字符串的每个字符&#xff0c;使用…

NCH DrawPad Pro for Mac/Win:强大的图像编辑处理软件

NCH DrawPad Pro for Mac/Win是一款功能全面的图像编辑和设计软件&#xff0c;专为Mac和Windows用户设计。它不仅适用于专业设计师&#xff0c;也深受业余爱好者和创意工作者的喜爱。DrawPad Pro凭借其丰富的绘图工具、强大的编辑功能和便捷的模板库&#xff0c;为用户提供了卓…

OpenCV杂项图像变换(2)线性混合函数blendLinear()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 执行两个图像的线性混合&#xff1a; dst ( i , j ) weights1 ( i , j ) ∗ src1 ( i , j ) weights2 ( i , j ) ∗ src2 ( i , j ) \texttt{…

策略模式+模版方法模式+简单工厂模式混用优化代码复杂分支问题

说明 这篇博客是在复杂场景使用策略和工厂模式代替分支语句升级版&#xff0c;增加了模版方法模式。将支付类的公共逻辑抽取到模板类中&#xff0c;使整个支付逻辑更加灵活&#xff0c;进一步优化了代码结构&#xff0c;提升了软件的可维护性和可读性。 流程图如下 先看一遍流…

.NET 多版本兼容的精美 WinForm UI控件库

目录 前言 项目介绍 项目使用 项目源码 项目案例 项目组件 项目地址 前言 有粉丝小伙伴在后台留言咨询有没有WinForm 控件库推荐&#xff0c;现在就给安排上。 .NET 平台进行 Windows 应用程序开发的我们来说&#xff0c;找一个既美观又实用的 WinForm UI 控件库至关重…

STM32通过ADM3222完成UART转232通信电平转换

1、简介 单片机默认串口输出电平是UART信号,但是在实际项目中经常需要将其转换成232电平,此时就需要ADM3222芯片来完成电平的转换,下面对使用过程进行总结。 2、硬件电路 从上图中可以看到芯片需要对1、18进行配置才能进行工作,通过查阅手册可知,1引脚需要配置低电平,…

云计算实训37——Dockerfile的应用+私有仓库的创建与管理

一、文件联合系统 文件联合系统&#xff08;Overlay Filesystem&#xff09;&#xff1a; 是一种允许多个文件系统层叠在一起的文件系统。它通常用于将只读文件系统&#xff08;如基础镜像&#xff09;与可写文件系统&#xff08;如用户的修改&#xff09;结合&#xff0c;形…

【3D目标检测】MMdetection3d——nuScenes数据集训练BEVFusion

引言 MMdetection3d&#xff1a;【3D目标检测】环境搭建&#xff08;OpenPCDet、MMdetection3d&#xff09; MMdetection3d源码地址&#xff1a;https://github.com/open-mmlab/mmdetection3d/tree/main?tabreadme-ov-file IS-Fusion源码地址&#xff1a;https://github.co…

【Scala】Windows下安装Scala(全面)

目录 1.下载 2.安装 3.配置环境变量 1.新增系统环境变量 2.环境变量Path 4.验证 1.下载 官网下载地址&#xff1a;https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.msi 2.安装 双击下载的.msi文件&#xff1a; 勾选"I accept the terms in the Li…

前后端交互的路径怎么来的?后端解决cors问题的一种方法

背景&#xff1a;后端使用node.js搭建&#xff0c;用的是express 前端请求的路径baseURL怎么来的 &#xff1f; 前后端都在同一台电脑上运行&#xff0c;后端的域名就是localhost&#xff0c;如果使用的是http协议&#xff0c;后端监听的端口号为3000&#xff0c;那么前端请求…

Django+Vue音乐推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

脚手架工具的应用(前端和后端搭建)

前端 一、安装 Node.js 环境 使用npm下载镜像 查看镜像&#xff1a;npm config get registry 切换淘宝镜像&#xff1a;npm config set registry https://registry.npmmirror.com 还原镜像&#xff1a;npm config set registry https://registry.npmjs.org 二、使用 Vue.js 脚…

智能停车场管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;车位信息管理&#xff0c;车位预订管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;地图&#xff0c;我的 开发系统&#xff1a;Windows 架构模式…