vue項目常用組件和框架結構介紹
vue項目基礎結構
一個vue的項目,我覺得最小的子集其實就是{vue,vue-router,component},vue作為基礎庫,為我們提供雙向綁定等功能。vue-router連接不同的"頁面",component作為樣式或者行為輸出,你可以通過這三個東西來實現(xiàn)最基本的靜態(tài)SPA網站。當然我在這里不談vue全家桶這樣寬泛的概念,我會如數(shù)家珍的把主要的技術點一一列舉。
1.vue-cli:搭建基本的vue項目骨架,腳手架工具
2.sass-loader&node-sass:我是使用的sass作為樣式的預編譯工具,兩者缺一不可,大家也可以自行選擇,less,stylus都可以
3.postcss:實現(xiàn)響應式布局的關鍵,px=>rem。大漠已經提出了基于vw,vh的布局方案,不過我暫時持觀望態(tài)度。
4.vuex:管理復雜的數(shù)據(jù)流向,狀態(tài)機工具,特化的Flux
5.vuex-persistedstate:將vuex中state持久化的工具
6.vue-router:實現(xiàn)SPA間“頁面”之間的跳轉
7.vue-lazyload:實現(xiàn)圖片的懶加載,優(yōu)化http傳輸性能
8.vue-awesome-swiper:輪播功能的實現(xiàn)及一些特殊切換效果的完成
9.better-scroll:實現(xiàn)列表滾動及父子組件間的滾動問題
10.axios:http工具,實現(xiàn)向API請求數(shù)據(jù),以及攔截器的實現(xiàn)
11.fastclick:解決300ms延遲的庫
以上這些,都是我覺得一個中大型的vue項目需要用到的,還有一些比如我在實現(xiàn)圖片上傳中用到了jsx的語法,需要babel-jsx這樣的東西,不具有普適性,就不例舉了。
下面簡述一下上面說到的這些東西,有的東西會單獨的來出來細說:
1.vue-cli:
https://github.com/vuejs/vue-cli
腳手架工具,當我們選擇vue作為我們的開發(fā)技術棧以后,就要開始為我們的項目搭建目錄及開發(fā)的環(huán)境。安裝好node以后,通過以后命令進行安裝
npm install -g vue-cli 將vue-cli安裝到全局環(huán)境
vue init webpack my-vue-demo 創(chuàng)建基于webpack模板的名為my-vue-demo文件名的vue項目
這里的模板有6中,不過我們比較常用的就是webpack了。
期間你會看到有一些例如e2e這樣的單元測試的工具和ESLint檢測代碼質量的工具,我覺得都是可以不必安裝的。
那么,其實我們最關心的就是在src文件夾下面的內容了??梢钥聪聢D
上圖就是一個在刨除vue-cli的基本結構,在項目上比較成熟的vue骨架了。
2&3 :sass,postcss
直接寫css得洪荒時代已經過去了,預編譯的樣式處理器幫助我們解放了生產力,提高了效率。sass,less,stylus各有優(yōu)缺,也各有信徒。
要使用sass的話,你需要安裝一下sass-loader和node-sass,不過node-sass不是很好裝,被墻的厲害,建議還是用taobao的鏡像。如果安裝完成后還是報錯無法解析的話,你可能就需要去webpack.base.conf.js里去看看是否設置好了對應的loader。
postcss的常用功能
px2rem => 可以幫助我們實現(xiàn)px到rem單位的轉換,只需要你定義好相應的轉換標準就可以了。
autoprefixer => 兼容性的處理postcss也可以幫我們處理好。
//vue-loader.conf.js module.exports = { loaders: utils.cssLoaders({ sourceMap: isProduction ? config.build.productionSourceMap : config.dev.cssSourceMap, extract: isProduction }), postcss: [ require('autoprefixer')({ browsers: ['iOS >= 7', 'Android >= 4.1'] }), require('postcss-px2rem') ({ remUnit: 64 }) ] }
4,5:vuex,vuex-persistedstate
https://github.com/robinvdvleuten/vuex-persistedstate
一個中大型的vue項目,肯定有復雜的狀態(tài)需要去管理。簡單的event bus已經不再適用了。
特化的Flux架構,vuex就迎頭頂上。簡而言之:他就是我們處理無論是用戶操作,API返回,URL變更等多重操作的狀態(tài)管理工具。以后我會具體的說下vuex。
用過vuex的人,會發(fā)現(xiàn)一個很痛苦的地方,就是vuex里面的state,只要我們去刷新,它就被釋放掉了。有的狀態(tài)還好,沒有了大不了我們可以讓用戶去重新操作一遍。但是像登錄這樣的操作,你不可能讓用戶刷一下就去登一下吧。當然,你會說,我們可以存到local啊,cookie里面啊。是可以!但是這樣的話,state就和local里的數(shù)據(jù)形成了一種松散的關聯(lián),state顯得十分的脆弱,因為你無法預知你什么時候會少寫一個setStore這樣的方法。vuex-persistedstate幫我們解決了這樣的問題,它幫我們直接把state映射到了本地的緩存環(huán)境,我們可以在computed里面用vuex提供的mapState輔助函數(shù),來動態(tài)的更新local里面的數(shù)據(jù)。而不需要持久化的state,我們依舊可以刷新來釋放掉。
6.vue-router
當我們使用vue來構建SPA的應用時,就等于說我們完全的分離了前后端。或者通俗點的說:這就是一個純前端的項目。后端僅僅提供數(shù)據(jù),任何的邏輯都在前端實現(xiàn)。既然"脫離"了后端,那么肯定就沒有request Mapping這樣的同步映射url了。那么,前端就需要router來實現(xiàn)我們前端"頁面"的跳轉。vue-router就幫我們做了這樣的事情,他提供給了路由守衛(wèi)給我們,我們可以設置全局的,組件內的路由守衛(wèi),來實現(xiàn)特定的業(yè)務邏輯。 提供過渡動畫,來更加生動的展示SPA應用應有的風采等等,這個以后也要具體的來說。
7.vue-lazyload
https://github.com/hilongjw/vue-lazyload
實現(xiàn)圖片的懶加載。這是前端性能優(yōu)化的一個必須面對的問題:圖片。懶加載可以減少請求的數(shù)量,而且在很直觀的視覺上,也有一個良好的過渡。當然,圖片我們也是需要去做一些處理的,使用webp格式來減小圖片的質量,或者通過oss來對圖片作處理。
8.vue-awesome-swiper
https://github.com/surmon-china/vue-awesome-swiper
通過它可以實現(xiàn)基本輪播,橫軸的切換,橫軸的列表滾動等。
例如我要去實現(xiàn)四個tab切換這樣的功能,但是簡單的display這樣的效果我又覺得不是很滿意。那么我們就可以通過swiper來實現(xiàn),每次tab里面的content都會對應swiper的一個swiper-item。切換的tab,其實就是swiper里面的next page或者before page.
data(){ return{ swiperOption: { slidesPerView :'auto', direction: 'horizontal', freeMode : true, loop: false, spaceBetween: 20, }, } }
<swiper :options="swiperOption" ref="swiper" v-if="list&& list.length !== 0"> <swiper-slide v-for="(item,index) in list" :key="index" class="hot-item"> <router-link :to="{name:'quickCar',params:{carID:item.CarID}}" class="description_car"> <img v-lazy="item.Attachments.length !==0 && item.Attachments[0].FilePath"/> <span>¥{{item.price}}/日</span> </router-link> </swiper-slide> </swiper> <p class="noData" v-else></p>
9.better-scroll
https://github.com/ustbhuangyi/better-scroll
實現(xiàn)縱軸列表的滾動,以及當有嵌套的路由的時候,通過better-scroll來實現(xiàn)的禁止父路由隨著子路由的滾動的問題。
better-scroll其實也可以去實現(xiàn)橫軸的滾動,但是為什么不使用better-scroll來處理呢?這是因為在better-scroll實現(xiàn)橫軸滾動的時候,我們無法在better-scorll的content的內容區(qū)域里去下向拉動我們的頁面。所以導致的一個Bug就是,在better-scroll橫軸滾動的區(qū)域里,頁面動不了了。
如上圖:橫軸滾動下面還有內容,但是在圖片所示的區(qū)域里面,無法向下拉動。所以橫軸的滾動其實也是通過vue-awesome-swiper來實現(xiàn)的。
10.axios
基本功能就是通過axios來請求后臺接口的數(shù)據(jù)。并且axios可以配合router更好的實現(xiàn)類似后臺的攔截器的功能,例如處理token過期這樣問題。因為當token過期的時候,僅僅通過vue-router的router.beforeEach來處理就有點無能為力了。這時候就需要配合后臺響應返回的code來進行url的處理。
11.fastclick
解決點透和點擊延時的問題http://www.dbjr.com.cn/article/131369.htm
相關文章
vue3中調用api接口實現(xiàn)數(shù)據(jù)的渲染以及詳情方式
這篇文章主要介紹了vue3中調用api接口實現(xiàn)數(shù)據(jù)的渲染以及詳情方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08Vue data的數(shù)據(jù)響應式到底是如何實現(xiàn)的
這篇文章主要介紹了Vue data的數(shù)據(jù)響應式到底是如何實現(xiàn)的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02element-ui帶輸入建議的input框踩坑(輸入建議空白以及會閃出上一次的輸入建議問題)
這篇文章主要介紹了element-ui帶輸入建議的input框踩坑(輸入建議空白以及會閃出上一次的輸入建議問題),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01