guides/vue.md
2024-01-10 19:54:31 +08:00

6.2 KiB
Raw Blame History

vue约定规范

  • 代码风格配置:
* 使用element 框架时eslint配置使用"eslint-plugin-vue",默认element-admin框架已完成配置
大部分规则也都配置在了eslint-plugin-vue之中当没有遵循规则的时候会报错
* 单独安装: npm install eslint-plugin-vue -D
* 使用quasar框架时创建(npm quasar create)时已完成配置
* 提交npm lint检查代码通过后再提交代码, 也可以添加husky检查但过于强制可以熟悉后再使用
  • 不要在css中直接修改框架内部class的样式可自行添加class进行覆盖或直接标签上style进行覆盖
  • !! 命名

文件和变量命名使用驼峰式,文件大驼峰,变量小驼峰, 尽量见名思义,看见文件名就可以知道这个文件下的大概内容。变量命名不要 User1、User2User111这样明明是设备的数据搞个Userxxxx来存放 文件名尽量双拼写单词,被引入时文件名即组件名

不明所以的命名
//****
const checked1 = ref("");
const checked2 = ref("");
const checked3 = ref("");
const input = ref("");
const value = ref("");
//**
const value1 = ref(""); //操作设备的数据
const value2 = ref(""); //操作账号的数据
let index1 = 0; //一级索引
let index2 = 0;
const search = ref("");
const search2 = ref("");
  • html标签使用要语义化

上网搜html语义化资料 如:参考链接

  • 组件的data属性使用驼峰式
  • git提交不要提交无用文件
  • 分组件: 先清楚为什么要分组件和分组件的作用
  1. 单一职责原则:每个组件只负责一项功能,这样可以使组件的代码更加简洁易读,并且方便维护和重用。

  2. 可复用性:每个组件都应该尽量独立,以便在其他地方重复使用。

  3. 组件之间的耦合度:组件之间应该尽量避免耦合,这样可以使得组件的代码更加灵活,便于维护和修改。

  4. 让组件尽可能小:尽可能使组件的代码行数少,这样可以使代码更易读,并且方便维护。

  5. 可读性:组件的代码应该有良好的结构,并且有适当的注释,便于阅读和理解。

无效分组件: 一个表格页面只在当前页面使用,不需要在其他页面使用,那么无需分组件,直接在页面中使用
<template>
  <main>
    <el-container>
      <TableView />
    </el-container>
  </main>
</template>

<script setup lang="ts">
import TableView from '@/components/ListModel/Table.vue';
</script>


该拆分的没有拆分组件: 一个表格页面在当前页面和其他页面都需要使用,那么需要分组件,并且在当前页面使用,如下面省市区 和项目/地块选择的代码,大部分的表格页面都用到,而且每个都要请求接口获取下拉数据,应该拆分成一个组件,这样可以减少代码量,并且可以复用,

<el-text class="box-up-title">作物长势监测</el-text>
<el-form inline :model="formData" class="box-up-form">
<el-form-item label="省">
    <el-select v-model="formData.province" placeholder="区域选择或搜索" clearable filterable @change="provinceSelected">
    <el-option v-for="item in provinceList" :label="item.cityName" :value="item.id" />
    </el-select>
</el-form-item>
<el-form-item label="市">
    <el-select v-model="formData.city" placeholder="区域选择或搜索" clearable filterable @change="citySelected" no-data-text="请先选择上级区域">
    <el-option v-for="item in cityList" :label="item.cityName" :value="item.id" />
    </el-select>
</el-form-item>
<el-form-item label="区/县">
    <el-select v-model="formData.county" placeholder="区域选择或搜索" clearable filterable @change="countySelected" no-data-text="请先选择上级区域">
    <el-option v-for="item in countyList" :label="item.cityName" :value="item.id" />
    </el-select>
</el-form-item>

<el-form-item label="地块">
    <el-select v-model="formData.plot_id" placeholder="地块选择" clearable filterable no-data-text="请先选择区县">
    <el-option v-for="item in plotList" :label="item.name" :value="item.id" />
    </el-select>
</el-form-item>
<el-form-item label="项目">
    <el-select v-model="formData.species_id" placeholder="项目选择或搜索" clearable filterable @change="speciesSelected">
    <el-option v-for="item in speciesList" :label="item.name" :value="item.id" />
    </el-select>
</el-form-item>
<el-form-item label="地块选择">
    <el-select v-model="formData.variety_id" clearable filterable >
    <el-option v-for="item in varietyListComputed" :label="item.name" :value="item.id" />
    </el-select>
</el-form-item>
  • vue3 统一使用setup风格,更简洁易明
<!-- js -->
<script setup>

<!-- ts -->
<script setup lang="ts">
  • 推荐使用Typescript/jsdoc开发
  • 组件、属性、事件、插槽的命名使用驼峰命名法,其中组件名首字母大写,调用时均使用小写中划线方式,如:
组件命名: MyComponent   

组件的属性命名: myProperty

组件的事件命名: myEvent

组件的插槽命名: mySlot

完整示例:

<my-component :my-property="value" @my-event="handleMyEvent">
    <template v-slot:my-slot> </template> 
</my-component>

  • 布局组件文件使用xxxLayout结尾命名
MainLayout
DeviceLayout
  • 页面文件使用xxxPage结尾命名
DevicePage
DeviceDetailPage
  • 路由定义每个页面必须带上唯一name通常与页面文件名一致页面跳转统一使用name切换不允许直接push路径方式
{
    path: '/device',
    name: 'DevicePage',
    component: () => import('@/views/device/DevicePage.vue')
}

跳转到页面时使用router.push({name: 'DevicePage'})

  • 不同组件间的引用尽量使用@/views/xxx/xxx.vue的路径方式避免使用相对路径方式
import DevicePage from '@/views/device/DevicePage.vue'
有的项目为 src
import DevicePage from '@/views/device/DevicePage.vue'
  • 路由定义每个页面必须带上meta属性其中meta.title为页面标题meta.icon为页面图标meta.keepAlive为页面是否需要缓存
  • 待补充