Swiper中文论坛

标题: vue3.x实战开发:vue3全家桶仿微信|vue3.0聊天实例 [打印本页]

作者: xiaoyan2015    时间: 2021-1-11 13:48
标题: vue3.x实战开发:vue3全家桶仿微信|vue3.0聊天实例

项目概述
Vue3WChat聊天 基于vue3.x+@vue/cli+vuex4+vueRouter4+vant3.x+v3popup等技术建构的仿制微信/QQ界面聊天实例。



技术架构





目录结构














vue3.0自定义导航+弹框组件
大家看到的项目中顶部导航及弹框功能,均是使用vue3自定义组件实现。

大家如果感兴趣,可以去看看之前的这篇分享文章。
vue3.0自定义弹框组件|vue3仿微信/ios弹窗效果


vue.config.js配置
  1. const path = require('path')

  2. module.exports = {
  3.     // 基本路径
  4.     // publicPath: '/',

  5.     // 输出文件目录
  6.     // outputDir: 'dist',

  7.     // assetsDir: '',

  8.     // 环境配置
  9.     devServer: {
  10.         // host: 'localhost',
  11.         // port: 8080,
  12.         // 是否开启https
  13.         https: false,
  14.         // 编译完是否打开网页
  15.         open: false,
  16.         
  17.         // 代理配置
  18.         // proxy: {
  19.         //     '^/api': {
  20.         //         target: '<url>',
  21.         //         ws: true,
  22.         //         changeOrigin: true
  23.         //     },
  24.         //     '^/foo': {
  25.         //         target: '<other_url>'
  26.         //     }
  27.         // }
  28.     },

  29.     // webpack配置
  30.     chainWebpack: config => {
  31.         // 配置路径别名
  32.         config.resolve.alias
  33.             .set('@', path.join(__dirname, 'src'))
  34.             .set('@assets', path.join(__dirname, 'src/assets'))
  35.             .set('@components', path.join(__dirname, 'src/components'))
  36.             .set('@views', path.join(__dirname, 'src/views'))
  37.     }
  38. }
复制代码


主页面main.js配置
引入一些公共组件/样式,路由及vuex状态管理。
  1. import { createApp } from 'vue'
  2. import App from './App.vue'

  3. // 引入vuex和路由配置
  4. import store from './store'
  5. import router from './router'

  6. // 引入js
  7. import '@assets/js/fontSize'

  8. // 引入公共组件
  9. import Plugins from './plugins'

  10. const app = createApp(App)

  11. app.use(store)
  12. app.use(router)
  13. app.use(Plugins)

  14. app.mount('#app')
复制代码


vue3表单验证
基于vue3.0语法的表单验证操作。使用getCurrentInstance获取this,可用来操作storerouter等。
  1. <script>  
  2. import { reactive, inject, getCurrentInstance } from 'vue'  
  3. export default {  
  4.     components: {},  
  5.     setup() {  
  6.         const { ctx } = getCurrentInstance()  

  7.         const v3popup = inject('v3popup')  
  8.         const utils = inject('utils')  
  9.         const formObj = reactive({})  

  10.         // ...  

  11.         const handleSubmit = () => {  
  12.             if(!formObj.tel){  
  13.                 Snackbar('手机号不能为空!')  
  14.             }else if(!utils.checkTel(formObj.tel)){  
  15.                 Snackbar('手机号格式不正确!')  
  16.             }else if(!formObj.pwd){  
  17.                 Snackbar('密码不能为空!')  
  18.             }else{  
  19.                 ctx.$store.commit('SET_TOKEN', utils.setToken());  
  20.                 ctx.$store.commit('SET_USER', formObj.tel);  

  21.                 // ...  
  22.             }  
  23.         }  

  24.         return {  
  25.             formObj,  
  26.             handleSubmit  
  27.         }  
  28.     }  
  29. }  
  30. </script>
复制代码


vue3全局钩子拦截登录
vue3中使用路由router.beforeEach来拦截页面登录状态。
  1. router.beforeEach((to, from, next) => {
  2.     const token = store.state.token

  3.     // 判断当前路由地址是否需要登录权限
  4.     if(to.meta.requireAuth) {
  5.         if(token) {
  6.             next()
  7.         }else {
  8.             // 未登录授权
  9.             V3Popup({
  10.                 content: '还未登录授权!', position: 'top', popupStyle: 'background:#fa5151;color:#fff;', time: 2,
  11.                 onEnd: () => {
  12.                     next({ path: '/login' })
  13.                 }
  14.             })
  15.         }
  16.     }else {
  17.         next()
  18.     }
  19. })
复制代码
ok,基于vue3.0实战聊天项目就暂时分享到这里。后续还会分享一些vue3实例项目,感谢大家的支持!
uniapp直播实例|uni-app+vue实现抖音小视频





作者: jianglong    时间: 2021-1-18 10:10
66666666666666
作者: wytongcxf    时间: 2021-5-8 17:25
这是高手




欢迎光临 Swiper中文论坛 (http://bbs.swiper.com.cn/) Powered by Discuz! X3.2