vue3.0实战项目
vue3.0+typescript+vite2实战:后台管理系统
- 一、技术栈
- 二、功能架构
- 三、框架搭建
- 四、安装插件
- 1、路由插件vue-router4安装使用
- 2、vuex4的安装
- 3、安装sass和element plus
- 五、系统开发
- 1、页面布局
- 2、侧边栏开发
- 3、全局使用动态的icon图标
- 4、全局提示框
一、技术栈
语法演变,vue3.0更加简便!
二、功能架构
三、框架搭建
- vite2创建项目
- vite2项目结构如下:vue版本为3.2.xx
- 或者使用vue cli3构建项目,输入命令
vue create xxx
,选择语法为vue3.0 .插件包括 router、vuex
四、安装插件
如果用vue-cli3搭建的时候勾选了这些插件,就不用下面的步骤,手动去安装,可以直接使用
1、路由插件vue-router4安装使用
1、输入命令npm i vue-router@4
安装 vue-router4
2、新建/router/index.ts配置路由
3、路由配置代码可以参考下面的
//router/index.ts代码
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'
const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: Home},{path: '/helloworld',name: 'helloworld',component: () => import('../components/HelloWorld.vue')}
]
const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes
})
export default router//main.js代码
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
createApp(App).use(store).use(router).mount('#app')
4、使用路由router4,路由跳转实现代码参考下面的(@click=“toPath(menu.path)”):
<!-- -->
<template><template v-for="menu in menus" :key="menu.path"><el-sub-menu v-if="menu.children && menu.children.length > 0" :index="menu.index"><template #title><el-icon><component :is="menu.meta.icon" /></el-icon><span>{{ menu.meta.title }}</span></template><menu-item :menus="menu.children"></menu-item></el-sub-menu><el-menu-item v-else :index="menu.index" @click="toPath(menu.path)"><el-icon><component :is="menu.meta?.icon" /></el-icon><span>{{ menu.meta?.title }}</span></el-menu-item></template>
</template><script setup lang="ts">
import { defineProps } from "vue";
import { useRouter } from 'vue-router';
defineProps(['menus'])
const router = useRouter()
const toPath = (item: string) => {router.push({ path: item });
}
</script><style lang="scss" scoped>
.el-sub-menu {.el-menu-item {background-color: #312a2a;}}
</style>
5、获取路由route的操作如下,比如监听(包括监听函数watch的用法)路由路径变化并获取所有路由信息,具体代码如下(import { useRoute } from ‘vue-router’;)
<!-- 布局:头部 -->
<template><div><el-breadcrumb separator="/"><el-breadcrumb-item :to="{ path: '/' }">homepage</el-breadcrumb-item><el-breadcrumb-item><a href="/">promotion management</a></el-breadcrumb-item><el-breadcrumb-item>promotion list</el-breadcrumb-item><el-breadcrumb-item>promotion detail</el-breadcrumb-item></el-breadcrumb></div>
</template><script setup lang="ts">
import { useRoute } from 'vue-router';
import { ref, watch } from 'vue';
const route = useRoute();
const breadcrumb = ref([]);
const getBreadcrumb = () => {console.log("===>", route.matched);
}
watch(() => route.path, () => {getBreadcrumb()
})
</script><style lang="scss" scoped>
</style>
上面的useRouter和useRoute的区别和vue2.0一样,区别:
this.$router是指所有路由,比如跳转路由地址时可使用
this.$router.push(‘/user’)或this.$router.replace(‘/home’)进行页面跳转.
This.$route是指当前路由(地址栏里的),可获取当前地址上的参数
this.$route.params.xxx
2、vuex4的安装
- 安装
npm i vuex@4
或者npm i vuex@next
- src下新建store目录,新建index.ts,写入如下内容,里面定义了一个数字类型count来测试使用
import { createStore } from 'vuex'
interface State{count:number
}
export default createStore<State>({state() {return {count:0}},mutations: {increment(state){state.count++}},actions: {},modules: {}
})
- 组件中使用案例:
<template><div class="hello"><button @click="increment">{{count}}</button></div>
</template><script setup>
import{useStore} from 'vuex'
const store=useStore()
const count=computed(()=>{return store.state.count
})
const increment=()=>{store.commit('increment')
}
</script>
<style scoped>
</style>
3、安装sass和element plus
- vite安装步骤,可以参考官方文档:element plus
安装成功后可找到相关版本编号,如下图
- vue-cli安装使用步骤
1、安装插件,输入以下命令npm install element-plus --save
、
npm install sass-loader sass -D
、
npm install -D unplugin-vue-components unplugin-auto-import
2、全局引用element-plus并配置。在main.ts里面写入如下关于element-plus的代码:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
createApp(App).use(store).use(router).use(ElementPlus).mount('#app')
在组件中使用,代码和效果如下
<template><div class="hello"><h1>{{ msg }}</h1><h1>{{ obj.name }}</h1><h1>{{ obj.age }}</h1><h1>{{ sum }}</h1><button @click="increment">{{count}}</button><el-button @click="increment">{{count}}</el-button></div>
</template>
<script setup>
import { ref, reactive, computed } from "vue";
import{useStore} from 'vuex'
const msg = ref(123);
const obj = reactive({ name: "Eric", age: 12 });
const sum=computed(()=>{return msg.value-obj.age
})
const store=useStore()
const count=computed(()=>{return store.state.count
})
const increment=()=>{store.commit('increment')
}
</script>
<style scoped>
h1 {margin: 40px 0 0;
}
</style>
五、系统开发
1、页面布局
大致位置如下:
开发步骤:
1、将官网的布局代码写入组件
<template><div class="common-layout"><el-container><el-aside width="200px">Aside</el-aside><el-container><el-header>Header</el-header><el-main>Main</el-main></el-container></el-container></div>
</template>
<script setup>
</script>
<style lang="scss">
.common-layout{display: flex;height: 100vh;.el-header, .el-footer {background-color: #B3C0D1;color: #333;text-align: center;line-height: 60px;}.el-aside {background-color: #D3DCE6;color: #333;text-align: center;line-height: 200px;}.el-main {background-color: #E9EEF3;color: #333;text-align: center;line-height: 160px;}
}
</style>
2、启动后如出现报错,Syntax Error: TypeError: this.getOptions is not a function
,则是上面安装sass的版本太高,卸载npm uninstall sass-loader sass -D
后依次安装如下插件即可
npm install node-sass@^7.0.1
npm install sass@^1.49.9
npm install sass-loader@^7.3.1
3、一般为了便于统一管理项目的样式,我们需要定义一些全局变量。如果你需要使用sass/scss语法定义一些全局的内容需要在项目根目录的vue.config.js文件(如果没有这个文件直接创建一个即可)下加上如下代码:注意了旧版本的sass-loader使用的是data字段,新版本的sass-loader使用的是prependData字段,我用的版本是旧版的。
module.exports = {css: {loaderOptions: {sass: {// 这里的值是你的全局变量文件路径,如果有多个全局变量用逗号分割开即可,如:// data: `@import"~@/assets/scss/main.scss";@import"~@/assets/scss/mixins/util.scss"`data: '@import "~@/style/global.scss";'}}}
4、页面效果如下
5、优化页面样式
5-1、去掉App.vue的#app的所有样式
5-2、项目public文件夹下的index.html中加入
<style>html,body{margin: 0;}</style>
2、侧边栏开发
后面的直接看源码:
源码地址:github的源码地址
3、全局使用动态的icon图标
3-1、 按需引用图标
使用的是如下代码,使用什么引用什么:
<el-menu-item index="2"><el-icon><icon-menu /></el-icon><template #title>Navigator Two</template>
</el-menu-item>
<el-menu-item index="3" disabled><el-icon><Document /></el-icon><template #title>Navigator Three</template>
</el-menu-item>import {Document,Menu as IconMenu,Location,Setting,
} from "@element-plus/icons-vue";
3-2、全局使用动态的icon
3-2-1、安装依赖
npm install @element-plus/icons
3-2-2、main.ts引入使用,代码如下:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElIcons from '@element-plus/icons'
//全局使用动态的icon
const app = createApp(App)
for (const name in ElIcons) {app.component(name, (ElIcons as any)[name])
}
app.use(store).use(router).use(ElementPlus).mount('#app')
3-2-3、去掉手动引用,直接使用即可
4、全局提示框
类似于vue2.0的this.$message.info()
,使用方式就是下面红框里的代码
效果如下
vue3.0实战项目相关推荐
- 关于 vue3.0 实战项目 setup、 props、 reactive、ref
关于 vue3.0 实战项目中遇到的问题 介绍vue3.0的特性: 亿点小知识 1.diff算法的优化 增加了静态标记PatchFlag 2.按需编译,体积比Vue2.x更小(Tree shaking ...
- Vue3.0 + Ts 项目框架搭建二:路由 Router
前言 上篇文章我们使用 vue-cli 创建了模板项目,可以看到安装的依赖只有 vue,所以要正常的驱动项目,安装必要的依赖是跑不了. 其中Router是控制整个系统的页面路由,是最重要的依赖之一.因 ...
- 【Vue3.0实战逐步深入系列】为问卷系统重新布局并添加登录及注销功能
[千字长文,熬夜更新,原创不易,多多支持,感谢大家] 前言 小伙伴们大家好.到目前为止我们的问卷调查已经实现了配置问卷,填写问卷,保存问卷,提交问卷,提交记录以及提交结果展示等基本功能.其实到这里关于 ...
- idea2020.2.2怎么创建web项目_创建Vue3.0的项目
1. 查看Vue的环境版本 Vue -V 如果版本低于4.0,则需要升级Vue的版本 npm install -g @vue/cli 2. 创建Vue 3.0的项目 3. VS Code 的环境配置 ...
- 【Vue3.0实战逐步深入系列】扩展投票功能基于elementui进行组件封装实现一个简单的问卷调查功能
[千字长文,熬夜更新,原创不易,多多支持,感谢大家] 前言 小伙伴们大家好.在前面一偏文章中我们把投票功能进行了简单的改造:引入了axios第三方库并进行了二次封装用于模拟请求服务器数据.同时添加了一 ...
- 前端学习(2670): vue3.0实战开始建立新项目功能清单
- 前端学习(2669): vue3.0实战开始建立新项目
- vue2.0实战项目——简单的快餐店系统
最近学习vue看到网上很多学习的资料,就找了一个项目系统练习,主要是想学习了的一些知识点,系统的组合运用一遍.网上根据技术胖老师博客的内容自己也实战了一遍,挺实用的,对vue框架有了更深入的了解以及自 ...
- vue main.js中引入js_手把手教你深入Vue3.0(Vue-cli4)项目打包性能优化实践
记录了自己的博客在禁用缓存的情况下,从八九秒加载时间到最终985ms的优化实践,开启缓存的情况下能达到138ms的访问速度 本人的个人博客采用的是Vue-cli4.1.2 + typescript构建 ...
最新文章
- 2015第22周六Java反射、泛型、容器简介
- Docker容器制作
- android应用程序的混淆打包(转)
- Swagger-概述
- CG-CTF-Web-伪装者
- 2019计算机二级java软件_2019年计算机二级Java考试冲刺题及答案(2)
- .net程序部署(setupFactory进阶)
- 在Windows 7上安装ACE 6.1.0
- SpringMVC文件上传(二)指定文件
- 19-background
- mysql 索引必须唯一_唯一索引和普通索引的区别是什么,什么时候需要建唯一
- 地摊经济一千年:从《韩熙载夜宴图》到木屋烧烤“撸串”
- mysql rename数据库_为什么现在MySQL无法重命名数据库?
- 碎片时间”绑架了多少焦虑的现代人?
- Android7.0以上如何获取头像(拍照或者从相册中选择)
- PAT乙级1033题解
- S32DS封装静态库相关问题
- mysql数据库结构导出word_Windows导出MySQL数据库表结构到Word文档-DBExportDoc V1.0 For MySQL...
- it之家 materia design 版
- linux系统安装fio工具步骤