紙上得來終覺淺,絕知此事要躬行!
Vue的文檔和教程看的太多,小的demo做的多,也不如自己實際的進行一個完整項目的開發(fā)。只有做了才知道原來問題這么多,這里列舉了一些你做demo教程可能不會遇見的坑。
一、項目的登錄攔截及用戶權(quán)限訪問控制問題。
一個很常見的需求就是對未登錄的用戶進行路由攔截和用戶的權(quán)限訪問,如果你的項目之前是通過后臺控制訪問路由的,那么之前的后端現(xiàn)在可能需要在前端也需要控制了,由于我們用vue腳手架搭建的都是純前端的路由訪問,先看看我們的一般的項目路徑:
你可能會注意到Vue的項目路徑里都有這個#號,這是一個錨點,說明我們的頁面靠后端可能控制不了你的路由了,這時候你需要進行Vue的路由攔截。(Vue-router 有個模式可以改為history ,但是改成這個模式后需要后端的服務(wù)有對應(yīng)的兼容,否則會造成某些頁面刷新找不到頁面,而且不會出現(xiàn)404頁面,需要自己寫路由去匹配404頁面,慎用) 。這時候我們需要在router的里面添加meta字段進行自定義一些信息。像下面這樣:
然后再main.js 加入全局的路由攔截。
router.beforeEach((to, from, next) =>{ if(to.meta.requireAuth){ //是否需要登錄攔截 if(store.state.tokens.token){ //已登錄 next() }else{ next({ path: '/', query: {redirect : to.fullPath} }) } }else{ next() } })
同理,用戶權(quán)限的認證也可以這么做。另外需要注意的是,這個登錄狀態(tài)需要使用localstorage或者cookie保存,只存在store里面會導(dǎo)致頁面一刷新登錄狀態(tài)就沒了(當然你可以在頁面mounted的時候去后臺獲取狀態(tài),然后改變store)。
二、組件的異步加載(按需加載組件)
在平時的demo中,你可能不會遇見這個需求,當頁面很多,組件很多的時候,你會發(fā)現(xiàn)你的頁面在首次加載的時候,異常的慢,這個是因為vue首次加載的時候把可能一開始看不見的組件也一次加載了,這個時候就需要對頁面優(yōu)化了,就需要異步組件了。如何去寫異步組件呢,實際上很簡單,只需要在你的路由index,js里加上require就可以了,像下面這樣,這也是所謂的按需加載組件的實現(xiàn)原理。
{ path: '/home', name: 'Home', component: function(resolve){ require(['@/views/home'], resolve) } }
三、多語種處理
你的項目可能是面向國際化的,此時你需要對項目進行多語種處理。幸運的是Vue已經(jīng)有了這個多語種的插件,vue-i18n .你可以像我這樣新建幾個多語種文件,
en.js
const messagesEn = { hello: 'Hello world'} export default messagesEn
zh.js
const messagesZh = { hello: '你好、世界'} export default messagesZh
i18n.js
import messagesEn from './en'import messagesZh from './zh'const messages = { en: { message: messagesEn }, zh: { message: messagesZh } } export default messages
然后再main.js 里引用
import VueI18n from 'vue-i18n'import messages from './international/i18n'Vue.use(VueI18n)const i18n = new VueI18n({ locale: 'en', // 語言標識 messages })
你可以在一個頁面里調(diào)用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'))
}
加入這樣的標簽就可以顯示國際化文件里的對應(yīng)此條了。
四、部署的生產(chǎn)環(huán)境上后和開發(fā)環(huán)境的樣式不一樣
這個問題我可是遭遇過,快上線了居然發(fā)現(xiàn)npm run build 之后放到服務(wù)器端竟然樣式和開發(fā)環(huán)境的不一樣,有點坑!
項目中使用了element-UI的組件,然后自己重寫了部分樣式,但是build之后卻被element-ui本身的樣式給覆蓋了,但在本地卻不會出現(xiàn)這個問題(這個不清楚為啥),解決辦法是試試在組件里新建個
<style>(不加scoped),在這里面改樣式,或者在覆蓋elementUI 樣式的時候在class前面加上body 提高該樣式優(yōu)先級,就不會被覆蓋了。另外自己的樣式要寫的規(guī)范,合乎正常的思維。這個也提醒我們,代碼要提前放到服務(wù)端試一試。
五、代碼格式、編輯器不統(tǒng)一造成代碼格式混亂,注意優(yōu)化代碼
這個無關(guān)Vue,但是還是建議一個團隊盡量統(tǒng)一代碼編輯器,并且使用eslint進行代碼格式檢查,否則會造成代碼在不同編輯器下顯示混亂,很不容易隊友閱讀和修改,并且要時刻注意優(yōu)化自己的代碼,簡化復(fù)雜的處理邏輯,否則會給日后的維護造成極大的困難
注:本文出自博客園 https://home.cnblogs.com/u/mdengcc/ ,轉(zhuǎn)載請注明出處。
http://www.cnblogs.com/mdengcc/p/7149881.html