Advertisement

Vue2.0项目重构到Vue3.0

阅读量:

1.新建Vue3.0项目,确定使用的脚手架

****第一种:在终端输入:npm init vue@latest

注: 选择项目功能时: 除了第一项的项目名字外,其他可以暂时No

cd

npm install

npm run dev :运行

npm run build: 打包 (生成一个dist文件夹)

第二种:在终端输入:npm init vite-app < project-name>

**** cd ****

npm install

npm run dev

3.所用到的插件具体引用:

npm i axios echarts element-plus font-awesome node-sass@6 sass-loader@10 qs echarts -s

4.我们在main.js中需要引入的插件有:

vue2.0代码块如下:

复制代码
 <template>

    
   <div class="studentList">
    
     <!-- 查询 -->
    
     <el-form
    
       :inline="true"
    
       :model="formInline"
    
       class="demo-form-inline"
    
       size="small"
    
     >
    
       <el-form-item label="姓名">
    
     <el-input v-model="formInline.name" placeholder="请输入姓名"></el-input>
    
       </el-form-item>
    
       <el-form-item>
    
     <el-button type="primary" @click="find">查询</el-button>
    
       </el-form-item>
    
       <el-form-item>
    
     <el-button type="primary" @click="reset">重置</el-button>
    
       </el-form-item>
    
     </el-form>
    
     <!-- 表格 -->
    
     <!-- 1 : 0-9 2:10-19 3:20-29 slice((当前页数-1) * 每页的条数),当前页数*当前的条数 -->
    
     <el-table :data="compData" border style="width: 100%">
    
       <el-table-column prop="name" label="姓名" align="center">
    
       </el-table-column>
    
       <el-table-column prop="age" label="年龄" align="center">
    
       </el-table-column>
    
       <el-table-column prop="sex_text" label="性别" align="center">
    
       </el-table-column>
    
       <el-table-column prop="number" label="学号" align="center">
    
       </el-table-column>
    
       <el-table-column prop="class" label="班级号" align="center">
    
       </el-table-column>
    
       <el-table-column prop="state_text" label="状态" align="center">
    
       </el-table-column>
    
       <el-table-column prop="phone" label="联系方式" width="110" align="center">
    
       </el-table-column>
    
       <el-table-column prop="address" label="地址" align="center">
    
       </el-table-column>
    
  
    
       <el-table-column align="center" label="操作" width="100">
    
     <template slot-scope="scope">
    
       <el-button
    
         type="danger"
    
         size="mini"
    
         icon="el-icon-delete"
    
         @click="del(scope.row)"
    
       >
    
       </el-button>
    
     </template>
    
       </el-table-column>
    
     </el-table>
    
     <!-- 分页 -->
    
     <el-pagination
    
       @size-change="handleSizeChange"
    
       @current-change="handleCurrentChange"
    
       :current-page="currentPage"
    
       :page-sizes="[5, 10, 20, 30, 50]"
    
       :page-size="pageSize"
    
       layout="total, sizes, prev, pager, next, jumper"
    
       :total="total"
    
     >
    
     </el-pagination>
    
   </div>
    
 </template>
    
  
    
 <script>
    
 import { ElMessage } from "element-plus";
    
 import { student, studentDel } from "../../api/api.js";
    
 export default {
    
   data() {
    
     return {
    
       tableData: [], // 表格内的总数量
    
       formInline: {
    
     // 查询
    
     name: "",
    
       },
    
       total: 0, // 总条数
    
       pageSize: 10, //每页显示的数量
    
       currentPage: 1, // 当前页
    
     };
    
   },
    
   created() {
    
     this.getData();
    
   },
    
   computed: {
    
     compData() {
    
       return this.tableData.slice(
    
     (this.currentPage - 1) * this.pageSize, //起点
    
     this.currentPage * this.pageSize //终点(数据截取在终点的前一个结束)
    
       );
    
     },
    
   },
    
   methods: {
    
     handleSizeChange(val) {
    
       //修改每页显示的数量
    
       this.pageSize = val;
    
       this.currentPage = 1; // 回到修改完成后,回到当前第一页
    
     },
    
     handleCurrentChange(val) {
    
       //修改当前页
    
       this.currentPage = val;
    
     },
    
     // 获取数据
    
     getData(params) {
    
       student(params).then((res) => {
    
     if (res.data.status === 200) {
    
       this.tableData = res.data.data;
    
       this.total = res.data.total;
    
       this.tableData.forEach((item) => {
    
         //尽量不要修改原数据,因为后续使用会造成影响
    
         item.sex === 1 ? (item.sex_text = "男") : (item.sex_text = "女");
    
         item.state === "1"
    
           ? (item.state_text = "已入学")
    
           : item.state === "2"
    
           ? (item.state_text = "未入学")
    
           : (item.state_text = "休学中");
    
       });
    
     }
    
       });
    
     },
    
     // 删除
    
     del(row) {
    
       studentDel(row.id).then((res) => {
    
     if (res.data.status === 200) {
    
       ElMessage({ message: "数据删除成功", type: "success" });
    
       // 重新获取数据
    
       this.getData();
    
     }
    
       });
    
     },
    
     // 查询
    
     find() {
    
       // 根据姓名显示数据
    
       this.getData(this.formInline);
    
     },
    
     // 重置
    
     reset() {
    
       this.formInline = {};
    
       this.getData(this.formInline);
    
     },
    
   },
    
 };
    
 </script>
    
  
    
 <style lang="scss">
    
 .studentList {
    
   .demo-form-inline,
    
   .el-form-inline {
    
     text-align: left;
    
   }
    
 }
    
 </style>

vue3.0代码块:

复制代码
 <template>

    
   <div class="student">
    
     <!-- 查询 -->
    
     <el-form
    
       :inline="true"
    
       :model="formInline"
    
       class="demo-form-inline"
    
       size="small"
    
     >
    
       <el-form-item label="姓名">
    
     <el-input v-model="formInline.name" placeholder="请输入姓名"></el-input>
    
       </el-form-item>
    
       <el-form-item>
    
     <el-button type="primary" @click="find">查询</el-button>
    
       </el-form-item>
    
       <el-form-item>
    
     <el-button type="primary" @click="reset">重置</el-button>
    
       </el-form-item>
    
     </el-form>
    
     <!-- 表格 -->
    
     <!-- 1: 0-9 2: 10-19 3: 20-29 slice((当前页数-1)*每页的条数,当前页数*当前的条数) -->
    
     <el-table :data="compDate" border style="width: 100%">
    
       <el-table-column prop="name" label="姓名" align="center">
    
       </el-table-column>
    
       <el-table-column prop="age" label="年龄" align="center">
    
       </el-table-column>
    
       <el-table-column prop="sex_text" label="性别" align="center">
    
       </el-table-column>
    
       <el-table-column prop="number" label="学号" align="center">
    
       </el-table-column>
    
       <el-table-column prop="class" label="班级号" align="center">
    
       </el-table-column>
    
       <el-table-column prop="state_text" label="状态" align="center">
    
       </el-table-column>
    
       <el-table-column prop="phone" label="联系方式" align="center" width="110">
    
       </el-table-column>
    
       <el-table-column prop="address" label="地址" align="center">
    
       </el-table-column>
    
  
    
       <el-table-column align="center" label="操作" width="100">
    
     <template slot-scope="scope">
    
       <el-button
    
         type="danger"
    
         size="mini"
    
         :icon="Delete"
    
         @click="del(scope.row)"
    
       >
    
       </el-button>
    
     </template>
    
       </el-table-column>
    
     </el-table>
    
     <!-- 分页 -->
    
     <el-pagination
    
       @size-change="handleSizeChange"
    
       @current-change="handleCurrentChange"
    
       :current-page="currentPage"
    
       :page-sizes="[5, 10, 20, 30, 50]"
    
       :page-size="pageSize"
    
       layout="total, sizes, prev, pager, next, jumper"
    
       :total="total"
    
     >
    
     </el-pagination>
    
   </div>
    
 </template>
    
  
    
 <script setup>
    
 import { Delete } from "@element-plus/icons-vue";
    
 import { student, studentDel } from "../../api/api.js";
    
 import { ref, reactive, computed } from "vue";
    
 import { onMounted } from "vue";
    
  
    
 // 表格内的总数据
    
 let tableData = ref([]);
    
 // 查询
    
 let formInline = reactive({
    
   name: "",
    
 });
    
 // 总条数
    
 let total = ref(0);
    
 // 每页显示的数量
    
 let pageSize = ref(10);
    
 // 当前页
    
 let currentPage = ref(1);
    
 onMounted(() => {
    
   getData();
    
 });
    
  
    
 let compDate = computed(() => {
    
   return tableData.value.slice(
    
     // 起点
    
     (currentPage.value - 1) * pageSize.value,
    
     // 终点(数据截取在终点的前一个结束)
    
     currentPage.value * pageSize.value
    
   );
    
 });
    
 // 修改每页显示的数量
    
 let handleSizeChange = function (val) {
    
   pageSize.value = val;
    
   // 每次修改完成后,回到当前第一页
    
   currentPage.value = 1;
    
 };
    
 // 修改当前页
    
 let handleCurrentChange = function (val) {
    
   currentPage.value = val;
    
 };
    
 // 获取数据
    
 let getData = function (params) {
    
   student(params).then((res) => {
    
     if (res.data.status === 200) {
    
       // 表格内的总数据
    
       tableData.value = res.data.data;
    
       // 总条数
    
       total.value = res.data.total;
    
       // 循环遍历
    
       tableData.value.forEach((item) => {
    
     // 因有些后台是数组,前端显示时需要改变为汉字
    
     // 尽量不要去修改原数据,因为后续的使用会造成影响
    
     item.sex === 1 ? (item.sex_text = "男") : (item.sex_text = "女");
    
     item.state === "1"
    
       ? (item.state_text = "已入学")
    
       : item.state === "2"
    
       ? (item.state_text = "未入学")
    
       : (item.state_text = "休学中");
    
       });
    
     }
    
   });
    
 };
    
 // 删除
    
 let del = function (row) {
    
   studentDel(row.id).then((res) => {
    
     if (res.data.status === 200) {
    
       $message({ message: "数据删除成功", type: "success" });
    
       // 重新获取数据
    
       getData();
    
     }
    
   });
    
   console.log(row);
    
 };
    
 // 查询
    
 let find = function () {
    
   getData(formInline);
    
 };
    
 // 重置
    
 let reset = function () {
    
   formInline = {};
    
   getData(formInline);
    
 };
    
 </script>

5.总结:

(1)什么是项目重构:

所谓重构(refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减少整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它的设计。

“在代码写好之后改进它的设计”这种说法有点儿奇怪。在软件开发的大部分历史时期,大部分人相信应该先设计而后编码:首先得有一个良好得设计,然后才能开始编码。但是,随着时间流逝,人们不断修改代码,于是根据原先设计所得的系统,整体结构逐渐衰弱。代码质量慢慢沉沦,编码工作从严谨的工程堕落为胡砍乱劈的随性行为。

“重构”正好与此相反。哪怕手上有一个糟糕的设计,甚至是一堆混乱的代码,我们也可以借由重构将它加工成设计良好的代码。重构的每个步骤都很简单,甚至显得有些过于简单:只需要把某个字段从一个类移到另一个类,把某些代码从一个函数拉出来构成另一个函数,或是在继承体系中把某些代码推上推下就行了。但是聚沙成塔,这些小小的修改累积起来就可以根本上改善设计质量。这和一般常见的“软件会慢慢腐烂”的观点恰恰相反。

(2)项目重构有点:

重构 是一种有条理的清理代码的方式,可以最大程度地减少引入 bug 的机会。有了重构以后,工作的平衡点开始发生变化。我发现设计不是在一开始完成的,而是在整个开发过程中逐渐浮现出来。在系统构筑过程中,我学会了如何不断改进设计。这个“构筑 - 设计”的反复互动,可以让一个程序在开发过程中持续保有良好的设计。

全部评论 (0)

还没有任何评论哟~