Vue3项目创建及干系设置

[复制链接]
发表于 2026-2-11 14:08:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Vue是一种用于构建用户界面的JavaScript框架。它接纳了一种称为MVVM(Model-View-ViewModel)的架构模式。
   MVVM是一种将用户界面与业务逻辑和数据分离的计划模式。它包罗三个部门:
  

  • Model(模子):体现应用步调的数据和业务逻辑。在Vue中,模子通常是一个JavaScript对象。
  • View(视图):体现用户界面。在Vue中,视图通常是利用HTML模板构建的。
  • ViewModel(视图模子):充当模子和视图之间的中心层。它通过数据绑定机制将模子数据自动更新到视图上,并将用户交互变乱通报给模子。在Vue中,ViewModel是由Vue实例扮演的。
Vue的焦颔首脑是通过数据驱动视图,使得界面的渲染和更新更加简朴高效。当模子数据发生变革时,Vue可以大概自动更新对应的视图。同时,用户在视图上的操纵也可以大概通过ViewModel通报给模子举行处理处罚。
安装设置nodejs

NPM的全称是Node Package Manager
中文名为Node.js包管理器,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的尺度。利用NPM可以方便地从一个环球的代码库中获取并安装Node.js模块,这些模块可以用于构建应用步调、工具和包等。开辟者可以通过NPM来搜刮、安装、更新和卸载各种Node.js模块。别的,NPM还提供了发布和共享代码、管理依靠、版本控制等功能,可以资助开辟者更方便地开辟和分享代码。
1.安装nodejs参考:nodejs安装和情况设置
2.设置情况变量,在体系变量path中添加nodejs的安装路径

3.管理员身份运行cmd
node -v 查察node的版本
npm -v 查察npm的版本(新版的node安装自带安装npm)
设置镜像源:
  1. npm config set registry https://registry.npmmirror.com
复制代码


创建Vue3项目

这里利用vite直接创建,vite是下一代前端开辟与构建工具
1.利用npm直接初始化
  1. npm create vite@latest
复制代码

这里大概必要利用管理员身份并跳转盘符到必要创建vue项目的指定位置:
2.选择项目模板 Vue

3.选择语言结构 JavaScript

4.以管理员身份运行 VS Code 打开刚刚创建的项目文件夹 easyvuea,
利用 Ctrl键+波浪线~ 打开终端并输入下令,安装依靠包
  1. npm install
复制代码

5.启动项目
  1. npm run dev
复制代码

6.按住Ctrl键访问


项目结构


在 VS Code 中安装Vue扩展

vite.config.js 可以设置项目启动自动打开项目首页
ctrl+`打开终端管理器 输入npm run dev启动项目实验


设置路由

Vue是一种用于构建单页面应用步调(SPA)的JavaScript框架。SPA指的是只有一个HTML页面的应用步调,而不是多个页面之间的传统网页应用步调。
在传统的多页面应用步调中,每个页面都是独立的,用户每次点击链接都会重新加载整个页面。而在单页面应用步调中,只有一个页面,而且页面内容的切换是通过动态加载和更新组件来实现的。
Vue通过内置的Vue Router插件提供了路由功能来实现单页面应用步调的页面切换。Vue Router答应开辟者界说差别路由对应的组件,并通过路由链接大概步调控制导航的方式举行页面切换。
1.创建views文件夹,并在此中创建所必要的vue文件:

2.在该项目中安装vue-router路由组件
  1. npm install vue-router
复制代码

3.在src中创建router文件夹,在文件夹中创建index.js文件,router/index.js就是路由的设置文件
  1. import { createRouter,createWebHashHistory } from "vue-router";
  2. const router=createRouter({
  3.     history:createWebHashHistory(),
  4.     routes:[
  5.         {path:'/easya',component:()=>import("../views/easya.vue")}
  6.     ]
  7. });
  8. export default router;
复制代码

4.在main.js文件中引用路由设置
  1. import router from './router'
复制代码

5.在App.vue文件中添加路由占位符

6.访问


绑定命据和函数

更多vue干系的利用教程参考官网:Vue官网
vue3保举利用setup函数绑定命据
在easya.vue中编写代码:


  • 利用ref函数声明相应式的值范例数据的初始值
  • 在setup函数中,对ref()函数声明的数据举行取值和赋值时,必要利用.value
  • 在template组件中利用ref()声明的数据,直接利用即可,不必要利用.value
  1. <script setup>
  2.     import {ref} from 'vue';
  3.     const num=ref(12);
  4.     const show=ref(true);
  5.     const arr=ref([12,34,56,78]);
  6.     const staffData=ref({});
  7.     const changeNum=function(){
  8.         console.log("changNum method")
  9.         num.value=num.value+1;
  10.     }
  11.     const changeShow=()=>{
  12.         show.value=!show.value;
  13.     }
  14. </script>
  15. <template>
  16.     <h1 v-text="num" v-if="show"></h1>
  17.     <button @click="changeNum">按钮</button>
  18.     <button @click="changeShow">是否显示</button>
  19.     <div v-for="(item,index) in arr" class="box">{{ index }}:{{ item }}</div>
  20. </template>
  21. <style>
  22.     .box{
  23.         height: 50px;
  24.         width: 50px;
  25.         border: 1px solid black;
  26.         margin: 10px;
  27.     }
  28. </style>
复制代码


axios异步哀求

1.在项目中安装axios,利用下令
  1. npm install axios
复制代码

2.在src中新建文件夹util工具包,此中新建文件http.js,代码如下:
  1. import axios from 'axios';
  2. export default function (options) {
  3.     //配置每次发送请求都从sessionStorage中获取名字叫token的数据,
  4.     //添加到请求头部的Authorization属性中
  5.     //Object.assign用于合并对象的数据
  6.     options.headers = Object.assign(
  7.         { Authorization: sessionStorage.getItem('token') },
  8.         options.headers || {}
  9.     );
  10.     //axios()   返回一个promise对象,用于异步请求
  11.     //options是一个对象,其中包含了许多用于配置请求的参数,
  12.     //例如请求的url、请求方法(GET、POST等)、请求头等
  13.     return axios(options)
  14.         .then(({ status, data, statusText }) => {
  15.             //该函数在请求成功并返回数据时被调用
  16.             //status:HTTP状态码,例如200表示请求成功。
  17.             //data:服务器返回的数据。
  18.             // statusText:HTTP状态文本,例如"OK"表示请求成功。
  19.             if (status == 200) {
  20.                 return data;
  21.             } else {
  22.                 throw new Error(statusText);
  23.             }
  24.         })
  25.         .catch(e=>{
  26.             return Promise.reject(e);
  27.             //return Promise.reject(e.message);
  28.         });
  29. }
复制代码
3.在src中新建api文件夹,在文件夹中创建index.js封装获取url的方法,代码:
  1. import http from '../util/http.js';
  2. const API={
  3.     get:(url)=>{return http({url:url,method:'get'})}
  4. };
  5. export default API;
复制代码

4.在easya.vue页面中编写代码,发送哀求
  1. <script setup>
  2.     import {ref,onMounted} from 'vue';
  3.     import easyapi from '../api';
  4.     const staffData=ref({});
  5.     //在挂载页面时获取员工数据用于填入表中
  6.     onMounted(async function(){
  7.         let result=await easyapi.get("/api/staff");
  8.         staffData.value=result.data;
  9.         console.log(staffData.value);
  10.     });
  11.     //主动获取员工数据的方法
  12.     const getData=async()=>{
  13.         staffData.value=await easyapi.get("/api/staff");
  14.         console.log(staffData.value);
  15.     }
  16.     //......
  17. </script>
  18. <template>
  19.     <table>
  20.         <tr><td>ID</td><td>CODE</td><td>NAME</td><td>SALARY</td></tr>
  21.         <tr v-for="(item,index) in staffData"> <td>{{ item.id }}</td><td>{{ item.code }}</td><td>{{ item.name }}</td><td>{{ item.salary }}</td></tr>
  22.     </table>
  23.     <button @click="getData">获取数据</button>
  24. </template>
  25. <style>
  26. </style>
复制代码
Vue的 onMounted 是Vue 3中的一个生命周期钩子函数(Lifecycle Hook),它在组件挂载(Mount)到DOM之后被调用。利用onMounted可以在组件挂载到DOM后实行一些异步操纵,比如发送网络哀求、获取数据、设置变乱监听等。
async 关键字用于声明一个函数是异步函数,即该函数大概会返回一个Promise对象,此中包罗函数实行结果。
await 关键字只能在async函数中利用。它会使函数停息实行,直到await反面的异步操纵完成并返回结果。
   Vue 3中的生命周期函数
  

  • onBeforeMount: 在组件挂载(即插入DOM)之前被调用。这个生命周期阶段通常用于在组件被渲染之前获取数据或实行其他准备工作。
  • onMounted: 在组件挂载之后被调用。这个生命周期阶段通常用于在组件已经插入DOM之后实行某些操纵,比方启动动画或定时使命。
  • onBeforeUpdate: 在组件更新之前被调用。这个生命周期阶段通常用于在组件更新之前获取数据或实行其他准备工作,比方重新渲染之前的清算工作。
  • onUpdated: 在组件更新之后被调用。这个生命周期阶段通常用于在组件已经更新之后实行某些操纵,比方根据新的数据重新渲染UI。
  • onBeforeUnmount: 在组件卸载(即从DOM中移除)之前被调用。这个生命周期阶段通常用于在组件卸载之前实行清算操纵,比方取消变乱监听器或定时使命。
  • onUnmounted: 在组件卸载之后被调用。这个生命周期阶段通常用于在组件已经从DOM中移除之后实行某些操纵,比方清算资源或记载日志日志。
留意:默认情况下,欣赏器会实行同源战略,即只答应来自雷同源的哀求访问资源,默认不答应跨域访问。这是为了防止恶意网站利用跨域哀求盗取用户的敏感信息或实行恶意操纵。

在某些情况下,我们大概必要答应差别源的哀求访问后端资源。在Spring框架中,通过为后端控制类添加 @CrossOrigin 注解,可以控制欣赏器是否答应跨域哀求访问后端资源,并设置答应跨域哀求的一些细节。

乐成获取数据:

5.设置署理
为了制止因后端服务器迁移造成的贫苦,在 vite.config.js 文件中设置如下代码:
  1. export default defineConfig({
  2.   plugins: [vue()],
  3.   server:{
  4.     // 配置vite冷启动项目自动使用浏览器访问首页
  5.     open:true,
  6.     proxy: {  
  7.       '/api': {
  8.         target: 'http://localhost:8080',
  9.         changeOrigin: true,
  10.         rewrite: (path) => path.replace(/^\/api/, ''),
  11.       },
  12.     }
  13.   }
  14. })
复制代码


利用ElementUI

具体利用教程参考官网:Element Plus
Element Plus是一个基于 Vue 3,面向计划师和开辟者的组件库
1.在Vue3中利用下令安装element-plu
  1. npm install element-plus --save
复制代码

2.在main.js中引入代码如下并添加 use(ElementPlus)
  1. import ElementPlus from 'element-plus'
  2. import 'element-plus/dist/index.css'
复制代码

3.在组件库中找到想要的样式,复制代码在easya.vue中利用,如告诫按钮:
  1. <el-button type="warning">Warning</el-button>
复制代码

利用结果如下:


整合:

1.新建easyb.vue
从Element的组件库中找到结构容器的代码加到 template标签中

找到侧栏菜单,更换 Aside 标签内容
修改一级菜单的文本内容为员工管理,二级菜单的文本为员工列表

在菜单的 <el-menu> 标签上 设置路由属性 router="true" 
在员工列表的 <el-menu-item index="1-1">  标签添加 route="stafflist" 用于跳转
在 <el-main> 标签之间添加路由占位符 <router-view></router-view>
  1. <script setup>
  2. </script>
  3. <template>
  4.     <div class="common-layout">
  5.       <el-container>
  6.         <el-header>Header</el-header>
  7.         <el-container>
  8.           <el-aside width="200px">
  9.             <el-menu
  10.         active-text-color="#ffd04b"
  11.         background-color="#545c64"
  12.         class="el-menu-vertical-demo"
  13.         default-active="2"
  14.         text-color="#fff"
  15.         @open="handleOpen"
  16.         @close="handleClose"
  17.         router="true"
  18.       >
  19.         <el-sub-menu index="1">
  20.           <template #title>
  21.             <el-icon><location /></el-icon>
  22.             <span>员工管理</span>
  23.           </template>
  24.           <el-menu-item-group title="Group One">
  25.             <el-menu-item index="1-1" route="stafflist">员工列表</el-menu-item>
  26.             <el-menu-item index="1-2">item two</el-menu-item>
  27.           </el-menu-item-group>
  28.           <el-menu-item-group title="Group Two">
  29.             <el-menu-item index="1-3">item three</el-menu-item>
  30.           </el-menu-item-group>
  31.           <el-sub-menu index="1-4">
  32.             <template #title>item four</template>
  33.             <el-menu-item index="1-4-1">item one</el-menu-item>
  34.           </el-sub-menu>
  35.         </el-sub-menu>
  36.         <el-menu-item index="2">
  37.           <el-icon><icon-menu /></el-icon>
  38.           <span>Navigator Two</span>
  39.         </el-menu-item>
  40.         <el-menu-item index="3" disabled>
  41.           <el-icon><document /></el-icon>
  42.           <span>Navigator Three</span>
  43.         </el-menu-item>
  44.         <el-menu-item index="4">
  45.           <el-icon><setting /></el-icon>
  46.           <span>Navigator Four</span>
  47.         </el-menu-item>
  48.       </el-menu>
  49.           </el-aside>
  50.           <el-main>
  51.             <router-view></router-view>
  52.           </el-main>
  53.         </el-container>
  54.       </el-container>
  55.     </div>
  56. </template>
  57. <style>
  58. </style>
复制代码
2.新建stafflist.vue用于获取后端的staff员工数据并存放到列表中展示,
在组件库找到符合的表格组件,这里简化了部门样式

  1. <script setup>
  2.     import {ref,onMounted} from 'vue';
  3.     import easyapi from '../api';
  4.     //定义绑定的数据
  5.     const tableData=ref([]);
  6.     //挂载页面时查询数据
  7.     onMounted(async function(){
  8.         let result=await easyapi.get("/api/staff");
  9.         tableData.value=result.data;
  10.     });
  11. </script>
  12. <template>
  13.   <el-table
  14.     :data="tableData"
  15.     style="width: 100%"
  16.   >
  17.     <el-table-column prop="id" label="ID" width="180" />
  18.     <el-table-column prop="code" label="编号" width="180" />
  19.     <el-table-column prop="name" label="姓名" />
  20.     <el-table-column prop="salary" label="薪资" />
  21.   </el-table>
  22. </template>
  23. <script></script>
复制代码
3.在router文件夹下的index.js中设置路由:新增 children:[...]
  1. import { createRouter,createWebHashHistory } from "vue-router";
  2. const router=createRouter({
  3.     history:createWebHashHistory(),
  4.     routes:[
  5.         {path:'/easyb',
  6.             component:()=>import("../views/easyb.vue"),
  7.             children:[{path:'/stafflist',component:()=>import("../views/stafflist.vue")}]
  8.         }
  9.     ]
  10. });
  11. export default router;
复制代码
4.结果测试:

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表