javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > 前端代码规范Vue篇

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

作者:前端初见

这篇文章主要介绍了前端代码规范的重要性以及Vue项目的编码规范,包括组件规范、模板规范、指令规范、标签顺序规范、必须为v-for设置键值、v-show与v-if选择、script标签内部结构顺序、VueRouter规范等具体内容,需要的朋友可以参考下

前端代码规范

规范的目的是为了编写高质量的代码,让你的团队成员每天得心情都是愉悦的,大家在一起是快乐的。

引自《阿里规约》的开头片段:

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

一、前端代码规范Vue篇

1、Vue编码基础

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

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

1.1、组件规范

正例:

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

反例:

export default {
  name: 'Todo',
  // ...
}
export default {
  name: 'todo-item',
  // ...
}

正例:

components/
|- my-component.vue

反例:

components/
|- myCoaponent.vue
|- MyCoaponent.vue

正例:

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

反例:

components/
|- MySutton.vue
|- VueTable.vue
|- Icon.vue

正例:

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

反例:

<my-component /><row><table :column="data"/></row>

正例:

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

反例:

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

正例:

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,
    },
  },
};

正例:

<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>

正例:

      <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">

反例:

   <input
  v-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 规范

let id='1113'
this.$router.push({name:'userDetail',
	query:{
 	 id:id
	}
})
{
    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 目录

正例:

后端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 目录

|-- 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、注释说明

整理必须加注释的地方

2.5、其他

总结

到此这篇关于前端开发必备小技巧之前端代码规范Vue篇的文章就介绍到这了,更多相关前端代码规范Vue篇内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文