Vue2項目構(gòu)建心得

在前端這個小圈子里充盈著各種各樣的技術(shù)撲牍白,而且他們的更新速度快,讓我作為一個前端小白很難適應(yīng)抖棘,最近恰好趕上公司要換新框架茂腥,而且給我們前端空出了學(xué)習(xí)時間,就研究了一下vue钉答,個人感覺vue相比前面研究的angular2,是簡單了點,學(xué)起來更容易上手杈抢!

vue

Vue.js( 是一套構(gòu)建用戶界面的漸進式框架数尿。與其他重量級框架不同的是,Vue 采用自底向上增量開發(fā)的設(shè)計惶楼。Vue 的核心庫只關(guān)注視圖層右蹦,它不僅易于上手诊杆,還便于與第三方庫或既有項目整合。

此項目搭建我用了Vue2 + iview, iview是很不錯的一套UI框架何陆,他像bootstrap一樣可以適配各種分辨率晨汹。

一.初始化簡單demo

1.vue2也有自己的腳手架工具vue-cli,首先你得全局安裝vue-cli:

$npm install -g vue-cli

2.使用vue-cli初始化項目,初始化項目時vue-cli官方(https://www.npmjs.com/package/vue-cli)已經(jīng)給提供了幾種模板供大家選擇,一般就用webpack

$vue init ?webpack-simple myProject

3.上一步執(zhí)行完畢贷盲,進入到你的項目里:

cd myProject

4.然后安裝項目依賴的包淘这,也就是在package.json文件里處在"devDependencies"下的包

$npm i?

5.再安裝生產(chǎn)環(huán)境下需要用到的包,也就是在package.json文件里處在"dependencies"下的包

$npm i --production

6.就緊接著再運行巩剖,這一步依賴于package.json文件里"scripts"下的內(nèi)容

$npm run dev?

7.就會看到瀏覽器里面自動打開一個頁面本地頁面 localhost:8080

此時一個簡單的vue2 demo已經(jīng)搭建成功了铝穷!


二.搭建完整的項目


頁面展示

首先得新建一個項目,步驟同簡單demo的初始化佳魔。

搭建項目曙聂,首先構(gòu)建你的整體框架,此項目只有有一個入口頁面鞠鲜,左側(cè)菜單始終顯示在頁面上宁脊,而后根據(jù)理由跳轉(zhuǎn)決定右側(cè)顯示和內(nèi)容


入口頁面代碼

其中menu部分可以根據(jù)權(quán)限動態(tài)生成,而中間變動的部分在<router-view>標簽內(nèi)顯示贤姆。

1.路由

router.js

在調(diào)用時需要寫為:<router-link to='/baseData/dictionary'></router-link>

很多人在這里會想到用懶加載來加載組件榆苞,代碼如下:?

{path:'/medicalSvc',name:'醫(yī)療服務(wù)',component:resolve => require(['../components/medicalData/medicalServe'], resolve),},

但是如果你構(gòu)建的是系統(tǒng)類項目,有上百個路由庐氮,這樣的話 當你用webpack hot進行代碼熱更新的時候语稠,速度就會超級慢,此時解決方法就是讓他在開發(fā)環(huán)境下不要懶加載弄砍,在生產(chǎn)環(huán)境下再進行懶加載仙畦。我們首先要定義一個變量

const _import = require('./_import_' + process.env.NODE_ENV);

process.env是讀取系統(tǒng)環(huán)境變量的,比如你在啟動服務(wù)的時候音婶,設(shè)置環(huán)境變量為production或者development慨畸,那么在程序里面就可以通過process.env.NODE_ENV獲取。此時你就需要再寫兩個文件(注意文件的名稱命名)分別導(dǎo)出不同環(huán)境下的文件目錄如:

*_production.js:? ?module.exports = file => () => import('@/pages/' + file + '.vue')

*_develope.js:? ?module.exports = file =>? import('@/pages/' + file + '.vue')

import文件

然后將組件路徑定義為:

{path:'/app/customerSource',component:_import('customerSource')},

那么又是怎么設(shè)置環(huán)境變量為production或者development值的呢衣式,是在配置文件index.js下

index.js

另外注意:404頁面一定要最后加載寸士,如果放在constantRouterMap一同聲明了404,它后面的所有頁面都會被攔截到404碴卧,詳細的問題見addRoutes when you've got a wildcard route for 404s does not work

2.權(quán)限控制


main.js

這里使用了router.beforeEach注冊一個全局的before鉤子弱卡,來在導(dǎo)航觸發(fā)之前判斷是否有權(quán)限進入改導(dǎo)航頁面。其中的“token”是用戶登錄成功住册,有服務(wù)器端返回的標識婶博,如果它存在,則證明用戶已經(jīng)登錄荧飞,所以

1.當其再訪問登錄頁面(to.path === '/login')時凡人,可直接重定向到首頁名党。

2.當其訪問其他路由時,需要判斷用戶是否具有訪問這些路由的權(quán)限挠轴,首先將用戶所有的權(quán)限轉(zhuǎn)換城路由掛載到router上传睹,接著當訪問路由上未掛載的頁面時便會定向到404頁面,訪問掛載上的頁面時岸晦,則會正常跳轉(zhuǎn)欧啤。

3.設(shè)置白名單是避免一些頁面浪費時間做重定向,比如404委煤,login.

4.注意:這里還有一個小hack的地方堂油,就是router.addRoutes之后的next()可能會失效,因為可能next()的時候路由并沒有完全add完成碧绞,我們簡單的通過next(to)巧妙的避開這個問題

permission.js

permission.js里面代碼只干了一件事情:那就是將用戶獲得的權(quán)限轉(zhuǎn)化成該用戶可以訪問的路由府框。具體的轉(zhuǎn)換方法要看后臺返回什么樣的數(shù)據(jù)。

3.http服務(wù)--axios

先得安裝axios : npm install axios --save

http.js

Axios 是一個基于 promise 的 HTTP 庫讥邻,可以用在瀏覽器和 node.js 中迫靖,我在項目中用Promise對象對其進行了封裝,目的是為了保證異步書寫代碼時兴使,數(shù)據(jù)這間的銜接性系宜。axios既可以通過發(fā)送post,get請求也可以通過API訪問服務(wù)器发魄。

4.vuex

Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式盹牧。個人理解vuex就相當于angular里面的service,用來存放狀態(tài)和數(shù)據(jù)

一個項目里面有一個store存儲器,在沒有store以前励幼,我們的vue組件可以理解成由state汰寓、view、action組成苹粟,三者之間的聯(lián)系是@state(data)有滑,驅(qū)動應(yīng)用的數(shù)據(jù)源;@view(template)嵌削,以聲明方式將state映射到視圖毛好;@actions(methods),響應(yīng)在view上的用戶輸入導(dǎo)致的狀態(tài)變化苛秕。但是當你的好多組件要共享一個數(shù)據(jù)時肌访,你得通過層層嵌套的父子組件來獲取并修改數(shù)據(jù),這樣做太繁瑣了艇劫,所以就想到要將多個組件共享的數(shù)據(jù)提出來吼驶,以一個全局單例模式管理,這便有了vuex。

store存儲器里包含

new Vuex.Store({ ? ? ? ? ? ? ? state:{...},mutations:{...},actions:{...},getters:{...} ? ? ? ? ? ? ? });

但是由于使用單一狀態(tài)樹旨剥,當你的項目足夠大時,所有的狀態(tài)都集中在一起浅缸,會 導(dǎo)致代碼臃腫轨帜,不易維護。于是?Vuex 允許我們將 store 分割成模塊(module)衩椒。每個模塊擁有自己的 state蚌父、mutation、action毛萌、getter苟弛。

5.組件之間的傳值

父組件向子組件傳值:通過為子組件綁定屬性

父:<table-hospital :dataTable="dataTable" :multiple="multiple" @changePage='changePage'></table-hospital>

子:

子組件

子組件向父組件傳值:通過向上廣播傳值

子:

子組件

父:<table-hospital :dataTable="dataTable" :multiple="multiple" @changePage='changePage'></table-hospital>

父組件

非父子組件之間通信時,(1)在簡單的場景下阁将,可以使用一個空的 Vue 實例作為:

varbus =newVue()膏秫,

// 觸發(fā)組件 A 中的事件

bus.$emit('id-selected',1)

// 在組件 B 創(chuàng)建的鉤子中監(jiān)聽事件

bus.$on('id-selected',function(id){.............. ...})

(2)可以通過vuex狀態(tài)管理模式來實現(xiàn)。

6.jQuery的引用

(1).用import的房是引入做盅,那么哪個壓面用到$,哪個頁面就得import jquery;

(2)在index.html頁面用<script>標簽引入缤削,這樣的話人和組件都不需要再次引入,可以直接使用

總結(jié):vue我也是初次接觸吹榴,說的不正確的地方亭敢,歡迎大家留言指出,讓我們在前端的道路上 互相傷害图筹!

相關(guān)內(nèi)容也可以參考:https://segmentfault.com/a/1190000009506097

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帅刀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子远剩,更是在濱河造成了極大的恐慌扣溺,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民宿,死亡現(xiàn)場離奇詭異娇妓,居然都是意外死亡,警方通過查閱死者的電腦和手機活鹰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門哈恰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人志群,你說我怎么就攤上這事着绷。” “怎么了锌云?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵荠医,是天一觀的道長。 經(jīng)常有香客問我,道長彬向,這世上最難降的妖魔是什么兼贡? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮娃胆,結(jié)果婚禮上遍希,老公的妹妹穿的比我還像新娘。我一直安慰自己里烦,他們只是感情好凿蒜,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胁黑,像睡著了一般废封。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丧蘸,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天漂洋,我揣著相機與錄音,去河邊找鬼力喷。 笑死氮发,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的冗懦。 我是一名探鬼主播爽冕,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼披蕉!你這毒婦竟也來了颈畸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤眯娱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爬凑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嘁信,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了潘靖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡卦溢,死狀恐怖糊余,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贬芥,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布蘸劈,位于F島的核電站袱讹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昵时。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一椒丧、第九天 我趴在偏房一處隱蔽的房頂上張望壹甥。 院中可真熱鬧,春花似錦壶熏、人聲如沸句柠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溯职。三九已至,卻和暖如春帽哑,著一層夾襖步出監(jiān)牢的瞬間谜酒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工妻枕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留僻族,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓屡谐,卻偏偏與公主長得像述么,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愕掏,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 :OpenDiggawesome-github-vue 是由OpenDigg整理并維護的Vue相關(guān)開源項目庫...
    果汁密碼閱讀 23,100評論 8 124
  • 來源:github.com Vue.js開源項目速查表:https://www.ctolib.com/cheats...
    zhangtaiwei閱讀 11,604評論 1 159
  • 童年的記憶總是閃著光的度秘,那時候的樹總是格外的高大,奶奶菜園的籬笆格外的可愛饵撑,我總是能想到小時候一些美好的畫面剑梳,然后...
    蒲公英的傘托閱讀 318評論 0 0
  • 夜色朦朧,烈酒未盡滑潘。堯借著酒性訴說著阻荒,屬于他們的故事。如果說學(xué)生時代的戀愛是人生最難忘的感情众羡,那么傳難以忘懷的也就...
    Min丶凱閱讀 509評論 0 0
  • 也不知道為什么總是沒有安全感 患得患失 做事情總是太在意別人的眼光和看法 來影響自己的行動和判斷 最后事情沒有按照...
    大酸閱讀 380評論 3 5