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)=>{
        //请求前的回调
        //添加token
        const tokenStore= useTokenStore();
        //判断有没有token
        if (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-editor
              theme="snow"
              v-model:content="articleModel.content"
              contentType="html"
              >
</quill-editor>

样式美化

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

这一期就先说到这啦

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力敲代码的小火龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值