vue2项目架构

news/2025/1/15 15:05:34/

一、创建项目

🍕🍕🍕全局安装vue脚手架

安装方式

npm install @vue/cli -g
cnpm install @vue/cli -g
yarn global add @vue/cli
🌭🌭版本查看
vue --version 目前4.x以上版本支持创建vue3项目
🍟版本升级命令
npm update -g @vue/cli
或者
yarn global upgrade --latest @vue/cli
🍔cli 创建项目
vue create 项目名称

vite 创建项目

npm create vite@latest
安装项目所需插件
yarn add vue-router@4
yarn add element-plus
yarn add vuex@next --save
安装项目开发依赖
yarn add sass -D
项目文件完善和分析
![在这里插入图片描述](https://img-blog.csdnimg.cn/ecede5de0f92462fba3bd4a000eb0ed1.png
路由库的使用
router/+index.js
首先导入

import Vue from 'vue';
import VueRouter from 'vue-router';
//分别引入路由组件
import Home from '@/pages/Home/index.vue';
import Search from '@/pages/Search/index.vue';
import Login from '@/pages/Login/index.vue';
import Register from '@/pages/Register/index.vue';
//先把VueRouter原型对象的push 先保存一份
let originPush = VueRouter.prototype.push;
//重写 VueRouter.prototype 的 push|replace 方法 
//第一个参数 告诉原型对象的push方法 往哪跳转(传递哪些参数)
VueRouter.prototype.push = function(location,resolve,reject){if(resolve && reject){//call || apply区别//相同点 都可以调用函数一次 并且可以篡改函数的上下文一次//不同点 call与apply传递参数不同 call传递参数用逗号隔开 而apply方法 传递数组originPush.call(this,location,resolve,reject);}else{originPush.call(this,location,()=>{},()=>{});}
}
Vue.use(VueRouter);
//配置路由 
const routes = [{path:'*',redirect:'/home',},{path: '/',component: Home,meta:{show:true}},{path:'/search/:abc?',name:'search',component:Search,meta:{show:true},// ----9.4路由组件能不能传递props数据?  可以// 第一种 布尔值写法 注意只有 params参数// props:true,// 第二种 对象写法 可以额外的给路由组件传递props数据 当然 需要相应组件接收 以上都不常用// props:{a:1,b:2}// 函数写法  可以把params query参数 通过props传递给路由组件// props:($route)=>{//   return {abc:$route.params.abc,k:$route.query.k}// }},{path:'/login',component:Login,meta:{show:false}},{path:'/register',component:Register,meta:{show:false}},// {//   path: '/about',//   name: 'about',//   // route level code-splitting//   // this generates a separate chunk (about.[hash].js) for this route//   // which is lazy-loaded when the route is visited.//   // component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')// }
]const routers = new VueRouter({routes
})
export default routers

请求封装

api/+request.js

//引入axios库 
import axios from "axios";
import nprogress from 'nprogress';// 请求进度条插件//.start() :进度条开始 .done():进度条结束
//引入进度条样式
import "nprogress/nprogress.css"
//request接收axios实例 进行配置
const request = axios.create({//配置对象 基础路径 发请求时 路径当中会出现apibaseURL: "/api",timeout: 5000,// 请求超时 
});
//请求拦截器:在发请求之前 拦截器可以监测到 发出去之前做一些业务
request.interceptors.request.use((config) => {//config:配置对象参数 里面有一个属性很重要,headers请求头 可以放字段信息 进行判断权限为后期准备 console.log(config);//进度条开始 nprogress.start();return config;
});
//响应拦截器:服务器响应数据返回后 拦截器可以监测到 可以做一些业务
request.interceptors.response.use((res) => {//进度条结束nprogress.done();return res.data;
}, (error) => {return Promise.reject(new Error('fails'))
})
//默认对外暴露
export default request;

main.js测试请求是否成功

//测试请求接口import { reqCategoryList } from '@/api';reqCategoryList();

此时会有跨域问题
vue.config.js文件中配置 devServer属性

devServer:{proxy:{'/api':{target:'http://xxx',// pathRewrite:{'^/api':''},//路径重写}}}

配置文件修改之后 项目需要重新启动

进度条 nprogress插件的使用
安装命令
cnpm i --save nprogress
/api/index.js 引入模块和对应的样式
import nprogress from ‘nprogress’;
//引入进度条样式 可以修改背景颜色
import “nprogress/nprogress.css”
提供了两个方法 .start() 进度条开始 .done()进度条结束
/api/request.js

request.interceptors.request.use((config) => {//config:配置对象参数 里面有一个属性很重要,headers请求头 可以放字段信息 进行判断权限为后期准备 console.log(config);//进度条开始 nprogress.start();return config;
});
//响应拦截器:服务器响应数据返回后 拦截器可以监测到 可以做一些业务
request.interceptors.response.use((res) => {//进度条结束nprogress.done();return res.data;
}, (error) => {return Promise.reject(new Error('fails'))
})

vuex状态管理库(集中式管理项目中组件共用的数据)

用于复杂项目 组件较多

核心

  • state
  • mutations
  • actions
  • getters
  • modules

既然是为解决管理各个组件的数据的插件 模块化优势支持

cnpm i --save vuex@3.6.2

基本使用

/src/+store/+index.js

import Vue from "vue"
import Vuex from "vues"
//先use一次 Vuex的Store方法 是一个构造函数可以去初始化仓库
Vue.use(Vuex)
//分别引入小仓库
import home from './home';
import search from './search';
//对外暴露Stroe类的一个实例 入口文件就可以引入加载了 
export default new Vuex.Store({//模块式开发方式存储modules: {home,search,}
})
//state:仓库存储数据的地方
const state = {};
//mutations:修改state的唯一手段
const mutations = {};
//actions:处理actions 可以做业务逻辑 处理异步
const actions = {};
//多用于简化仓库数据 让组件获取仓库的数据更加方便
const getters = {};

main.js

//引入store仓库
import store from './store';
new Vue({//注册路由 信息 组件身上拥有了($route)和($router)属性 $route和$routerrouter,//注册仓库 同理 组件实例身上会有 ($store)属性store,render: h => h(App)
}).$mount('#app')

仓库 定义的state数据 在组件中如何获取呢 使用辅助函数
import { mapState } from ‘vuex’;
如果组件很多 数据都放在一个模块中 后期会很难维护
对此,vuex提供了 模块化存储 modules:{}

总结

此时,vue2项目的前提准备工作已经准备完毕。路由的配置、axios的配置、request的封装、vuex的配置、仓库模块化的配置。


http://www.ppmy.cn/news/1152240.html

相关文章

微服务13-Seata的四种分布式事务模式

文章目录 XA模式实现XA模式 AT模式AT模式的脏写问题(对同数据并发写的问题)其他事务不获取全局锁的一个情况(AT模式写隔离的实现)实现AT模式 TCC模式TCC实现我们怎么样去判断是否空回滚和业务悬挂?业务分析 Saga模式总…

Java版本+企业电子招投标系统源代码+支持二开+招投标系统+中小型企业采购供应商招投标平台

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部供…

Sketch macOS 支持m1 m2 Sketch 2023最新中文版

SketchUp Pro 2023是一款功能强大的三维建模软件,适用于建筑设计师、室内设计师、工程师和其他创意专业人士。以下是SketchUp Pro 2023的一些主要特点和功能: 三维建模:SketchUp Pro 2023允许用户以直观的方式创建三维模型。通过简单的绘图工…

【ICer的脚本练习】tcl语法熟悉和工具tcl的实例

系列的目录说明请见:ICer的脚本练习专栏介绍与全流程目录_尼德兰的喵的博客-CSDN博客 前言 TCL(Tool Command Language)是一种简单但功能强大的脚本语言,它经常用于自动化任务、测试和快速原型开发。你看这个名字就能知道,这个语言最主要的作用就是用来操作工具,尤其我们…

联想电脑一键重装系统Win10操作方法

很多用户都会利用重装系统的方法,来解决系统崩溃、病毒感染等问题。但是,很多新手用户不知道联想电脑Win10系统重装的详细方法步骤,下面小编给大家详细介绍关于联想电脑Win10系统重装的操作方法,帮助大家轻松快速地完成系统的重装…

实体解析实施的复杂性

实体的艺术表现斯特凡伯克纳 一、说明 实体解析是确定数据集中的两条或多条记录是否引用同一现实世界实体(通常是个人或公司)的过程。乍一看,实体分辨率可能看起来像一个相对简单的任务:例如,给定一张人物的两张照片&a…

Spark上使用pandas API快速入门

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…

使用pdfjs实现在线预览pdf

在工作中可能会遇到前端展示pdf文件进行预览并提供下载的需求场景,例如操作指引,这个时候需要寻找一款实现该功能的插件,以pdjjs举例子 1. 安装pdf.js npm install pdfjs-dist2. 引入pdf.js import pdfjsLib from pdfjs-dist3.加载pdf文件流 这个地方区分是请求后端接口还是…