Vue 实际项目中你可能会遇见问题

纸上得来终觉浅,绝知此事要躬行!

  Vue的文档和教程看的太多,小的demo做的多,也不如自己实际的进行一个完整项目的开发。只有做了才知道原来问题这么多,这里列举了一些你做demo教程可能不会遇见的坑。

  一、项目的登录拦截及用户权限访问控制问题。

  一个很常见的需求就是对未登录的用户进行路由拦截和用户的权限访问,如果你的项目之前是通过后台控制访问路由的,那么之前的后端现在可能需要在前端也需要控制了,由于我们用vue脚手架搭建的都是纯前端的路由访问,先看看我们的一般的项目路径:

你可能会注意到Vue的项目路径里都有这个#号,这是一个锚点,说明我们的页面靠后端可能控制不了你的路由了,这时候你需要进行Vue的路由拦截。(Vue-router 有个模式可以改为history ,但是改成这个模式后需要后端的服务有对应的兼容,否则会造成某些页面刷新找不到页面,而且不会出现404页面,需要自己写路由去匹配404页面,慎用) 。这时候我们需要在router的里面添加meta字段进行自定义一些信息。像下面这样:

然后再main.js 加入全局的路由拦截。

 1 router.beforeEach((to, from, next) =>{
 2     if(to.meta.requireAuth){ //是否需要登录拦截
 3         if(store.state.tokens.token){ //已登录
 4             next()
 5         }else{
 6             next({
 7                 path: ‘/‘,
 8                 query: {redirect : to.fullPath}
 9             })
10         }
11     }else{
12         next()
13     }
14 })

同理,用户权限的认证也可以这么做。另外需要注意的是,这个登录状态需要使用localstorage或者cookie保存,只存在store里面会导致页面一刷新登录状态就没了(当然你可以在页面mounted的时候去后台获取状态,然后改变store)。

  二、组件的异步加载(按需加载组件)

  在平时的demo中,你可能不会遇见这个需求,当页面很多,组件很多的时候,你会发现你的页面在首次加载的时候,异常的慢,这个是因为vue首次加载的时候把可能一开始看不见的组件也一次加载了,这个时候就需要对页面优化了,就需要异步组件了。如何去写异步组件呢,实际上很简单,只需要在你的路由index,js里加上require就可以了,像下面这样,这也是所谓的按需加载组件的实现原理。

1 {
2       path: ‘/home‘,
3       name: ‘Home‘,
4       component: function(resolve){
5          require([‘@/views/home‘], resolve)
6       }
7 }

三、多语种处理

  你的项目可能是面向国际化的,此时你需要对项目进行多语种处理。幸运的是Vue已经有了这个多语种的插件,vue-i18n .你可以像我这样新建几个多语种文件,

en.js

const messagesEn = {
    hello: ‘Hello world‘
}
export default messagesEn

zh.js

const messagesZh = {
    hello: ‘你好、世界‘
}
export default messagesZh

i18n.js

 1 import messagesEn from ‘./en‘
 2 import messagesZh from ‘./zh‘
 3 const messages = {
 4   en: {
 5     message: messagesEn
 6   },
 7   zh: {
 8     message: messagesZh
 9   }
10 }
11
12 export default messages

然后再main.js 里引用

1 import VueI18n from ‘vue-i18n‘
2 import messages from ‘./international/i18n‘
3 Vue.use(VueI18n)
4
5 const i18n = new VueI18n({
6   locale: ‘en‘,    // 语言标识
7   messages
8 })

你可以在一个页面里调用this.$i18n进行语种切换

this.$i18n.locale = ‘zh‘

页面里

<p>{{ $t("message.hello") }}</p>
<p v-text="$t("message.hello")"></p>

js里面:
mounted: function(){
              alert(this.$t(‘message.hello‘))
        }

加入这样的标签就可以显示国际化文件里的对应此条了。

   四、部署的生产环境上后和开发环境的样式不一样

  这个问题我可是遭遇过,快上线了居然发现npm run build 之后放到服务器端竟然样式和开发环境的不一样,有点坑!

  项目中使用了element-UI的组件,然后自己重写了部分样式,但是build之后却被element-ui本身的样式给覆盖了,但在本地却不会出现这个问题(这个不清楚为啥),解决办法是试试在组件里新建个

  <style>(不加scoped),在这里面改样式,或者在覆盖elementUI 样式的时候在class前面加上body 提高该样式优先级,就不会被覆盖了。另外自己的样式要写的规范,合乎正常的思维。这个也提醒我们,代码要提前放到服务端试一试。

  五、代码格式、编辑器不统一造成代码格式混乱,注意优化代码

  这个无关Vue,但是还是建议一个团队尽量统一代码编辑器,并且使用eslint进行代码格式检查,否则会造成代码在不同编辑器下显示混乱,很不容易队友阅读和修改,并且要时刻注意优化自己的代码,简化复杂的处理逻辑,否则会给日后的维护造成极大的困难

时间: 2024-08-29 07:51:53

Vue 实际项目中你可能会遇见问题的相关文章

Vue 实际项目中你可能会遇见的坑

纸上得来终觉浅,绝知此事要躬行! Vue的文档和教程看的太多,小的demo做的多,也不如自己实际的进行一个完整项目的开发.只有做了才知道原来问题这么多,这里列举了一些你做demo教程可能不会遇见的坑. 一.项目的登录拦截及用户权限访问控制问题. 一个很常见的需求就是对未登录的用户进行路由拦截和用户的权限访问,如果你的项目之前是通过后台控制访问路由的,那么之前的后端现在可能需要在前端也需要控制了,由于我们用vue脚手架搭建的都是纯前端的路由访问,先看看我们的一般的项目路径: 你可能会注意到Vue的

vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现前后台分离开发

在项目开发中,前后台分离,做了假数据,项目使用vue2.0重构,后台也推到重来了,为了不耽误开发进程,我做了虚拟的数据请求,使用vue-cli脚手架搭建的项目文件中dev-server搭建虚拟api请求,访问自己mock的假数据虚拟请求后台的模式,具体做法如下 在build/dev-server.js文件中 在var app = express()这个实例的下面添加如下代码 // 本地json-server服务器搭建代码 // 引入数据库文件 var appData = require('../

Vuex内容解析和vue cli项目中使用状态管理模式Vuex

中文文档:vuex官方中文网站 一.vuex里面都有些什么内容? const store = new Vuex.Store({ state: { name: 'weish', age: 22 }, getters: { personInfo(state) { return `My name is ${state.name}, I am ${state.age}`; } } mutations: { SET_AGE(state, age) { commit(age, age); } }, acti

如何在vue &amp;&amp; webpack 项目中的单文件组件中引入css

引入方式很简单,就是在script下使用require()即可. 因为import 是import...from 的形式,所以是不需要的. <script> import {mapState, mapMutations} from "vuex" import DetailItem from "@components/detail" require('../assets/css/swiper-3.4.1.min.css') export default {

如何降低Vue.js项目中Webpack打包文件的大小?

https://blog.csdn.net/maray/article/details/50988500?utm_source=blogxgwz0 import Blur from 'vux/src/components/blur/index.vue' import Cell from 'vux/src/components/cell/index.vue' import Range from 'vux/src/components/range/index.vue' import Toast fr

在工作中你可能会遇见的事情哈

问题1==>今天遇见一个问题 在UI图上有[新增便签内容] [获取便签内容] 然后我却忘记问 有没有[删除便签] [修改便签] 以后如果有 新增 获取 别忘记问一下有没有 crud 问题2==>还有就是当某一个区域显示列表时. 一定要问一下.如果列表里的数据很多. 是一次性获取后台的数据.(会有滚动条,不推荐除非数据少) 还是会做成 滚动条滚动到底部的时候.再拉取下一页的数据(推荐) 提高性能 原文地址:https://www.cnblogs.com/IwishIcould/p/1210506

VUE真实项目中常用的生命周期和参数

<template> <div class="first-app"> {{msg}} <br/> {{msg1}} <Confin text='注册' @message="getMeaasge"></Confin> </div> </template> <script> import Confin from '@/components/sub/Confin'; expor

mockjs 在项目中vue项目中使用

一.为什么要使用mockjs 总结起来就是在后端接口没有开发完成之前,前端可以用已有的接口文档,在真实的请求上拦截ajax,并根据mockjs的mock数据的规则,模拟真实接口返回的数据,并将随机的模拟数据返回参与相应的数据交互处理,这样真正实现了前后台的分离开发. 二.在vue的项目中怎么去使用mockjs 1.下载mockjs npm install mockjs --save 2.使用mockjs 2.1在项目目录中新建mock/mockServer.js  模拟服务端 1 import

Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)

在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config]platformName=AndroidappPackage=com.sheinsideappActivity=.module.GuideActivitybaseUrl=http://0.0.0.0:4723/wd/hubfindElementTimes=10[cmd]openAppium=nod