Vue3项目创建及相关配置

news2024/9/25 9:37:53

Vue是一种用于构建用户界面的JavaScript框架。它采用了一种称为MVVM(Model-View-ViewModel)的架构模式。

MVVM是一种将用户界面与业务逻辑和数据分离的设计模式。它包括三个部分:

  1. Model(模型):表示应用程序的数据和业务逻辑。在Vue中,模型通常是一个JavaScript对象。

  2. View(视图):表示用户界面。在Vue中,视图通常是使用HTML模板构建的。

  3. 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)

设置镜像源

npm config set registry https://registry.npmmirror.com


创建Vue3项目

这里使用vite直接创建,vite是下一代前端开发与构建工具

1.使用npm直接初始化

npm create vite@latest

这里可能需要使用管理员身份并跳转盘符到需要创建vue项目的指定位置:

2.选择项目模板 Vue

3.选择语言结构 JavaScript

4.以管理员身份运行 VS Code 打开刚刚创建的项目文件夹 easyvuea,

使用 Ctrl键+波浪线~ 打开终端并输入命令,安装依赖包

npm install

5.启动项目

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路由组件

npm install vue-router

3.在src中创建router文件夹,在文件夹中创建index.js文件,router/index.js就是路由的配置文件

import { createRouter,createWebHashHistory } from "vue-router";

const router=createRouter({
    history:createWebHashHistory(),
    routes:[
        {path:'/easya',component:()=>import("../views/easya.vue")}
    ]
});
export default router;

4.在main.js文件中引用路由配置

import router from './router'

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

6.访问


绑定数据和函数

更多vue相关的使用教程参考官网:Vue官网

vue3推荐使用setup函数绑定数据

在easya.vue中编写代码:

  • 使用ref函数声明响应式的值类型数据的初始值
  • 在setup函数中,对ref()函数声明的数据进行取值和赋值时,需要使用.value
  • 在template组件中使用ref()声明的数据,直接使用即可,不需要使用.value
<script setup>
    import {ref} from 'vue';
    const num=ref(12);
    const show=ref(true);
    const arr=ref([12,34,56,78]);
    const staffData=ref({});
    const changeNum=function(){
        console.log("changNum method")
        num.value=num.value+1;
    }
    const changeShow=()=>{
        show.value=!show.value;
    }
</script>
<template>
    <h1 v-text="num" v-if="show"></h1>
    <button @click="changeNum">按钮</button>
    <button @click="changeShow">是否显示</button>

    <div v-for="(item,index) in arr" class="box">{{ index }}:{{ item }}</div>
</template>
<style>
    .box{
        height: 50px;
        width: 50px;
        border: 1px solid black;
        margin: 10px;
    }
</style>


axios异步请求

1.在项目中安装axios,使用命令

npm install axios

2.在src中新建文件夹util工具包,其中新建文件http.js,代码如下:

import axios from 'axios';

export default function (options) {
    //配置每次发送请求都从sessionStorage中获取名字叫token的数据,
    //添加到请求头部的Authorization属性中

    //Object.assign用于合并对象的数据
    options.headers = Object.assign(
        { Authorization: sessionStorage.getItem('token') },
        options.headers || {}
    );
    //axios()   返回一个promise对象,用于异步请求
    //options是一个对象,其中包含了许多用于配置请求的参数,
    //例如请求的url、请求方法(GET、POST等)、请求头等
    return axios(options)
        .then(({ status, data, statusText }) => {
            //该函数在请求成功并返回数据时被调用
            //status:HTTP状态码,例如200表示请求成功。
            //data:服务器返回的数据。
            // statusText:HTTP状态文本,例如"OK"表示请求成功。
            if (status == 200) {
                return data;
            } else {
                throw new Error(statusText);
            }
        })
        .catch(e=>{
            return Promise.reject(e);
            //return Promise.reject(e.message);
        });
}

3.在src中新建api文件夹,在文件夹中创建index.js封装获取url的方法,代码:

import http from '../util/http.js';

const API={
    get:(url)=>{return http({url:url,method:'get'})}
};
export default API;

4.在easya.vue页面中编写代码,发送请求

<script setup>
    import {ref,onMounted} from 'vue';
    import easyapi from '../api';

    const staffData=ref({});
    //在挂载页面时获取员工数据用于填入表中
    onMounted(async function(){
        let result=await easyapi.get("/api/staff");
        staffData.value=result.data;
        console.log(staffData.value);
    });
    //主动获取员工数据的方法
    const getData=async()=>{
        staffData.value=await easyapi.get("/api/staff");
        console.log(staffData.value);
    }
    //......
</script>
<template>
    <table>
        <tr><td>ID</td><td>CODE</td><td>NAME</td><td>SALARY</td></tr>
        <tr v-for="(item,index) in staffData"> <td>{{ item.id }}</td><td>{{ item.code }}</td><td>{{ item.name }}</td><td>{{ item.salary }}</td></tr>
    </table>

    <button @click="getData">获取数据</button>
</template>
<style>
</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 文件中配置如下代码:

export default defineConfig({
  plugins: [vue()],
  server:{
    // 配置vite冷启动项目自动使用浏览器访问首页
    open:true,
    proxy: {  
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ''),
      },
    }
  }
})


使用ElementUI

具体使用教程参考官网:Element Plus

Element Plus是一个基于 Vue 3,面向设计师和开发者的组件库

1.在Vue3中使用命令安装element-plu

npm install element-plus --save

2.在main.js中引入代码如下并添加 use(ElementPlus)

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

3.在组件库中找到想要的样式,复制代码在easya.vue中使用,如警告按钮:

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

<script setup>
</script>

<template>
    <div class="common-layout">
      <el-container>
        <el-header>Header</el-header>
        <el-container>
          <el-aside width="200px">
            <el-menu
        active-text-color="#ffd04b"
        background-color="#545c64"
        class="el-menu-vertical-demo"
        default-active="2"
        text-color="#fff"
        @open="handleOpen"
        @close="handleClose"
        router="true"
      >
        <el-sub-menu index="1">
          <template #title>
            <el-icon><location /></el-icon>
            <span>员工管理</span>
          </template>
          <el-menu-item-group title="Group One">
            <el-menu-item index="1-1" route="stafflist">员工列表</el-menu-item>
            <el-menu-item index="1-2">item two</el-menu-item>
          </el-menu-item-group>
          <el-menu-item-group title="Group Two">
            <el-menu-item index="1-3">item three</el-menu-item>
          </el-menu-item-group>
          <el-sub-menu index="1-4">
            <template #title>item four</template>
            <el-menu-item index="1-4-1">item one</el-menu-item>
          </el-sub-menu>
        </el-sub-menu>
        <el-menu-item index="2">
          <el-icon><icon-menu /></el-icon>
          <span>Navigator Two</span>
        </el-menu-item>
        <el-menu-item index="3" disabled>
          <el-icon><document /></el-icon>
          <span>Navigator Three</span>
        </el-menu-item>
        <el-menu-item index="4">
          <el-icon><setting /></el-icon>
          <span>Navigator Four</span>
        </el-menu-item>
      </el-menu>
          </el-aside>
          <el-main>
            <router-view></router-view>
          </el-main>
        </el-container>
      </el-container>
    </div>
</template>

<style>
</style>

2.新建stafflist.vue用于获取后端的staff员工数据并存放到列表中展示,

在组件库找到合适的表格组件,这里简化了部分样式

<script setup>
    import {ref,onMounted} from 'vue';
    import easyapi from '../api';
    //定义绑定的数据
    const tableData=ref([]);

    //挂载页面时查询数据
    onMounted(async function(){
        let result=await easyapi.get("/api/staff");
        tableData.value=result.data;
    });

</script>

<template>
  <el-table
    :data="tableData"
    style="width: 100%"
  >
    <el-table-column prop="id" label="ID" width="180" />
    <el-table-column prop="code" label="编号" width="180" />
    <el-table-column prop="name" label="姓名" />
    <el-table-column prop="salary" label="薪资" />
  </el-table>
</template>

<script></script>

3.在router文件夹下的index.js中配置路由:新增 children:[...]

import { createRouter,createWebHashHistory } from "vue-router";

const router=createRouter({
    history:createWebHashHistory(),
    routes:[
        {path:'/easyb',
            component:()=>import("../views/easyb.vue"),
            children:[{path:'/stafflist',component:()=>import("../views/stafflist.vue")}]
        }
    ]
});
export default router;

4.效果测试:

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

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

相关文章

Windows安装Swoft框架

实现方式&#xff1a; 安装虚拟机&#xff0c;在虚拟机里用宝塔搭建环境后安装Swoft&#xff0c; 然后用Phpstorm SSH方式开发&#xff0c;用Apipost调用 websocket服务。 1、安装虚拟机&#xff0c;下载和安装参见 &#xff1a; https://blog.csdn.net/2401_84297265/article…

基于STM32的智能窗帘控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家居智能窗帘控制办公室窗帘自动调节常见问题及解决方案 常见问题解决方案结论 1. 引言 智能窗帘控制系统能够通过时间、光照强度或远程控制&#xff0c;实现对…

基于OBSIDIAN+Ollama+llama3.1构建个人智能助理

这里写自定义目录标题 重新定义个人智能助理&#xff1a;应用场景隐私保护与数据安全&#xff1a;构建可信赖的AI系统人工智能底座&#xff1a;搭建基于OLLAMA的大模型我的OLLAMA本地化部署配置不同模型的响应情况各大模型对计算机资源的要求&#xff08;家庭使用为主&#xff…

38.【C语言】指针(重难点)(C)

目录: 8.const 修饰指针 *修饰普通变量 *修饰指针变量 9.指针运算 *指针或-整数 *指针-指针 *指针关系运算 8.const 修饰指针 const 全称 constant adj.不变的 *修饰普通变量 #include <stdio.h> int main() {const int num 0;num 20;printf("%d\n", num)…

高并发HTTP服务器项目:性能与功能性测试汇总

负载测试 测试环境说明 云服务器&#xff1a;2核2G 2M Linux服务端和客户端环境&#xff1a;同在上述服务器中运行测试工具&#xff1a; wrk 模拟高并发请求htop检测CPU与内存使用情况 低负载压测&#xff1a;百万请求测试&#xff0c;2线程&#xff0c;100并发&#xff0c;100…

C++ 几何算法 - 求两条直线交点

一:算法介绍 1. 首先定义两条直线方程: 2. 解方程,求出x, y坐标 3. 如果x分母的行列式等于0, 说明两条直线平行或方向相反 4. 如果x,y分母的行列式都等于0,说明两条线重叠 二:代码实现: #include <cmath> #include <iostream>class Point2D { public:doubl…

Dubbo框架实现RPC远程调用包括nacos的配置和初始化

项目背景介绍 这个技术我是直接在项目中运用并且学习的&#xff0c;所以我写笔记最优先的角度就是从项目背景出发 继上一次API网关完成了这个实现用户调用一次接口之后让接口次数增多的操作之后&#xff0c;又迎来了新的问题。 就是我们在调用接口的时候需要对用户进行校验&…

关于地址的级联选择器

相信大家在项目中经常要做关于地址的级联选择器&#xff1a;效果如下图 在常见的组件库&#xff0c;例如element-ui/element-plus等中就有关于级联选择器的使用&#xff0c;但该组件并没有封装好的关于中国省市区甚至更详细的关于地址的级联选择器&#xff0c;因此我尝试在网络…

Excel中的数据筛选利器:COUNTIF函数深度解析与应用实战

文章目录 前言一、COUNTIF基础应用二、常见用法1.基本条件计数2.使用通配符进行模糊匹配3.引用单元格中的值作为条件4.多条件计数&#xff08;使用COUNTIFS&#xff09;5.重复值查找与去重6.结合其他函数使用 前言 Excel中的COUNTIF函数是一个极为强大且灵活的工具&#xff0c;…

【MongoDB 】MongoDB 介绍及应用,设计到4个案例

MongoDB 介绍概述 基础概念 MongoDB 是非关系型数据库&#xff0c;也就是nosql&#xff0c;存储json数据格式会非常灵活&#xff0c;要比数据库mysql/MariaDB更好&#xff0c;同时也能为mysql/MariaDB分摊一部分的流量压力。 对于经常读写的数据他会存入内存&#xff0c;如此…

STL中的list以及简单实现

STL的list的底层结构其实就是带头双向循环双向链表 带头双向循环双向链表又简单又好用&#xff0c;效率又高&#xff0c;所以其结构是完美的&#xff08;对于链表而言&#xff09;&#xff1a; 其中一个原因&#xff1a;有哨兵位的头节点&#xff0c;又循环&#xff0c;找尾很…

前端day7-css选择器

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css</title><!-- 内嵌式CSS --><sty…

Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)

在使用Excel进行数据处理和分析时&#xff0c;对特定单元格进行背景颜色填充不仅能够提升工作表的视觉吸引力&#xff0c;还能帮助用户快速识别和区分不同类别的数据&#xff0c;增强数据的可读性和理解性。 本文将通过以下三个示例详细介绍如何使用Python在Excel中设置不同的单…

远程连接本地虚拟机失败问题汇总

前言 因为我的 Ubuntu 虚拟机是新装的&#xff0c;并且应该装的是比较纯净的版本&#xff08;纯净是指很多工具都尚未安装&#xff09;&#xff0c;然后在使用远程连接工具 XShell 连接时出现了很多问题&#xff0c;这些都是我之前没遇到过的&#xff08;因为之前主要使用云服…

javax.validation.constraints.NotEmpty 报错

1、问题 javax.validation.constraints.NotEmpty报错2、原因 validation-api版本较低问题 3、解决 升级版本 javax.validation:validation-api 由1.1.0.Final升级至 2.0.1.Final <dependency><groupId>javax.validation</groupId><artifactId>vali…

机房托管服务器说明

机房托管服务器是指将企业或个人的服务器放置到专业数据中心(IDC机房)进行管理和维护&#xff0c;由数据中心提供稳定、安全的运行环境以及网络连接等基础设施支持。rak小编为您整理发布机房托管服务器说明详细内容。 通过托管服务器到专业机房&#xff0c;企业能够享受到高性能…

【Redis 进阶】集群(重点理解流程和原理)

一、基本概念 前面学习的哨兵模式&#xff0c;提高了系统的可用性。但是真正用来存储数据的还是 master 和 slave 节点&#xff0c;所有的数据都需要存储在单个 master 和 slave 节点中。如果数据量很大&#xff0c;接近超出了 master / slave 所在机器的物理内存&#xff0c…

Maxon公司产品将于 2024 年 9 月提高订阅价格?

Maxon公司的用户们最近在Reddit和Core 4D论坛上分享了一张图片&#xff0c;图片内容显示了Maxon公司计划在2024年9月1日对其产品订阅价格进行调整&#xff0c;涉及的产品包括Cinema 4D和ZBrush等。 根据这张图片&#xff0c;Redshift渲染器的月度订阅费用将上涨2.2%&#xff0c…

社交网络的演变:从Facebook到Meta的战略转型

随着科技的飞速发展&#xff0c;社交网络平台正经历着深刻的变革。Facebook的品牌重塑为Meta不仅是名称的更改&#xff0c;更是对未来社交网络模式的全新定义。本文将深入探讨Facebook向Meta转型的背景、战略及其未来影响&#xff0c;剖析这一转型对社交网络的深远影响。 背景与…

UKP3d,AutoPDMS出报表时数值格式如何调整

用户问&#xff0c;支吊架一览表的位移数值不是整数&#xff0c;请问怎么处理呢&#xff1f; 1.在AutoPDMS是修改软件的安装目录下的配置文件&#xff0c;如图&#xff1a; 2.在UKP3d里修改报表元件&#xff0c;如图&#xff1a;