当前位置: 首页 > news >正文

Vue前端工程

创建一个工程化的vue项目

npm init vue@latest

全默认回车就好了

登录注册校验 

//定义数据模型
const registerData=ref({username:'',password:'',rePassword:''
})
//校验密码的函数
const checkRePassword=(rule,value,callback)=>{if (value===''){callback(new Error('请再次输入密码'))}else if (value!==registerData.value.password){callback(new Error('请确保两次输入的密码一样'))}else {callback()}
}
//定义表单校验规则
const rules={username:[{required:true,message:'请输入用户名',trigger:'blur'},{min:5,max:16,message:'长度为5-16为非空字符',trigger:'blur'}],password:[{required:true,message:'请输入密码',trigger:'blur'},{min:5,max:16,message:'长度为5-16为非空字符',trigger:'blur'}],rePassword:[{validator:checkRePassword,trigger:'blur'}]
}

路由

路由,决定从起点到终点的路径的进程
在前端工程中,路由指的是根据不同的访问路径,展示不同组件的内容

vue-router的使用步骤

1、安装vue-router  npminstall vue-router@4

npm install vue-router@4

2、在src/router/index.js中创建路由器,并导出

index.js:

import {createRouter,createWebHistory} from 'vue-router'//导入组件
import  LoginVue from '@/views/Login.vue'
import LayoutVue from '@/views/Layout.vue'//定义路由关系
const routes=[{path:'/login',component:LoginVue},{path:'/',component:LayoutVue}
]//创建路由器
const router=createRouter({history:createWebHistory(),routes:routes
})//导出路由
export default router

3、在vue应用实例中使用vue-router

import './assets/main.scss'import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import router from  '@/router'import App from './App.vue'const app = createApp(App)
app.use(router)
app.use(ElementPlus)
app.mount('#app')

4、声明router-view标签,展示组件内容

<script setup></script><template>
<router-view></router-view>
</template>

那么现在如何实现登录页面的跳转呢?

先导入userRouter模块

import {useRouter} from 'vue-router'
const router = useRouter()

在登陆成功时,使用router.push

 子路由

1、配置子路由

import {createRouter,createWebHistory} from 'vue-router'//导入组件
import  LoginVue from '@/views/Login.vue'
import LayoutVue from '@/views/Layout.vue'import ArticleCategory from "@/views/article/ArticleCategory.vue";
import ArticleManage from "@/views/article/ArticleManage.vue";
import UserAvatar from "@/views/user/UserAvatar.vue";
import UserInfo from "@/views/user/UserInfo.vue";
import UserResetPassword from "@/views/user/UserResetPassword.vue";//定义路由关系
const routes=[{path:'/login',component:LoginVue},{path:'/',component:LayoutVue,children:[{path:'/article/category',component:ArticleCategory},{path:'/article/manage',component:ArticleManage},{path:'/user/avatar',component:UserAvatar},{path:'/user/info',component:UserInfo},{path:'/user/resetPassword',component:UserResetPassword}]}
]//创建路由器
const router=createRouter({history:createWebHistory(),routes:routes
})//导出路由
export default router

2、声明router-view标签

在所需要的地方添加

3、为菜单项 el-menu-item 设置index属性,设置点击后的路由路径

但是这个时候当我们刚进入这个页面的时候,中间页面是不显示东西的

这时就可以在index.js里加入重定向

当登录进来的时候就会直接跳转到默认页面 

Pinia状态管理库

Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态

使用pinia的步骤

1、安装pinia npminstall pinia

npm install pinia

2、在vue应用实例中使用pinia

3、在src/stores/token.js中定义store

//定义store
import {defineStore} from 'pinia'
import {ref} from 'vue'
/*** 第一个参数:名字,唯一性* 第二个参数:函数,函数内部可以定义状态的所有内容** 返回值:函数*/
export const useTokenStore=defineStore('token',()=>{//定义状态和内容//1、响应式变量const token=ref('')//2、定义一个函数,修改token的值const setToken=(newToken)=>{token.value=newToken}//3、函数,移除token的值const removeToken=()=>{token.value=''}return {token,setToken,removeToken}
});

4、在组件中使用store

但是这个时候页面刷新的话就会出现服务异常,我们可以使用下面的Pinia持久化插件-persist来解决

Pinia持久化插件-persist

Pinia默认是内存存储,当刷新浏览器的时候会丢失数据。Persist插件可以将pinia中的数据持久化的存储

使用Pinia持久化插件-persist

1、安装persist npm install pinia-persistedstate-plugin

npm install pinia-persistedstate-plugin

2、在pinia中使用persist

3、定义状态Store时指定持久化配置参数

未登录统一处理

在reques.js里导入

import router from '@/router'

并添加判断响应状态码的代码

完整的request.js代码

//定制请求的实例//导入axios  npm install axios
import axios from 'axios';import { ElMessage } from 'element-plus'
//定义一个变量,记录公共的前缀  ,  baseURL
//const baseURL = 'http://localhost:8080';
const baseURL = '/api';
const instance = axios.create({baseURL})import {useTokenStore} from "@/stores/token.js";
//添加请求拦截器
instance.interceptors.request.use((config)=>{//请求前的回调//添加tokenconst tokenStore= useTokenStore();//判断有没有tokenif (tokenStore.token){config.headers.Authorization=tokenStore.token}return config;},
(err)=>{//请求错误的回调Promise.reject(err)
}
)
/*import {useRouter} from "vue-router";
const router = useRouter();*/
import router from '@/router'
//添加响应拦截器
instance.interceptors.response.use(result=>{//判断业务状态码if (result.data.code===0){return result.data;}//操作失败/*alert(result.data.msg?result.data.msg:'服务异常')*/ElMessage.error(result.data.msg?result.data.msg:'服务异常')//异步操作的状态转化为失败return Promise.reject(result.data)},err=>{//判断响应状态码,如果为401则证明未登录,提示请登录,并跳转到登陆页面if (err.response.status===401){ElMessage.error('请先登录')router.push('/login')}else {ElMessage.error('服务异常')}alert('服务异常');return Promise.reject(err);//异步的状态转化成失败的状态}
)export default instance;

富文本编辑器的使用

文章内容需要使用到富文本编辑器,这里咱们使用一个开源的富文本编辑器 Quill

官网地址: VueQuill | Rich Text Editor Component for Vue 3

安装

npm install @vueup/vue-quill@latest --save

导入组件和样式

import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'

 使用quill组件


<quill-editortheme="snow"v-model:content="articleModel.content"contentType="html">
</quill-editor>

样式美化

.editor {width: 100%;:deep(.ql-editor) {min-height: 200px;}
}

这一期就先说到这啦

努力遇见更好的自己!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【面试】前端开发中的“八股文”:助力还是阻力?
  • 入门 PyQt6 看过来(案例)16~ 竖状菜单
  • 晋升有望,5本易录用的计算机三四区潜力刊,通过率>50%,2个月超速接收,好发
  • 飞牛爬虫FlyBullSpider 一款简单方便强大的爬虫,限时免费 特别适合小白!用它爬下Boss的2024年7月底Java岗位,分析一下程序员就业市场行情
  • Prometheus+Grafana 监控平台实践-搭建常用服务监控告警
  • 7月29(信息差)
  • 家庭教育系列—剑桥通用英语五级考试介绍
  • elementUI 的el-date-picker日期,开始时间不能大于结束时间
  • NSSCTF-GDOUCTF 2023新生赛
  • Springboot与SpringSecurity使用(1):介绍、登录验证
  • 【C#】 使用GDI+获取两个多边形区域相交、非相交区域
  • [数据集][目标检测]船上翻越栏杆危险行为检测数据集VOC+YOLO格式3678张1类别
  • 第13周 简历职位功能开发与Zookeeper实战
  • 4000元投影仪性价比之王:爱普生TW5750极米RS10还是当贝X5S?
  • 前端Long类型精度丢失:后端处理策略
  • Akka系列(七):Actor持久化之Akka persistence
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ECMAScript入门(七)--Module语法
  • ES6 学习笔记(一)let,const和解构赋值
  • ES6语法详解(一)
  • Java知识点总结(JavaIO-打印流)
  • leetcode388. Longest Absolute File Path
  • maya建模与骨骼动画快速实现人工鱼
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 阿里云前端周刊 - 第 26 期
  • 从零开始的无人驾驶 1
  • 分享一份非常强势的Android面试题
  • 关于springcloud Gateway中的限流
  • 将回调地狱按在地上摩擦的Promise
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  •  一套莫尔斯电报听写、翻译系统
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 责任链模式的两种实现
  • 主流的CSS水平和垂直居中技术大全
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ![CDATA[ ]] 是什么东东
  • (1) caustics\
  • (35)远程识别(又称无人机识别)(二)
  • (7)STL算法之交换赋值
  • (c语言)strcpy函数用法
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (九)信息融合方式简介
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)图像的%2线性拉伸
  • (算法设计与分析)第一章算法概述-习题
  • (转)iOS字体
  • (转)LINQ之路
  • ***详解账号泄露:全球约1亿用户已泄露