Vue開發(fā)中常見的套路和技巧總結(jié)
屬性排放
export default { name: '名稱', components: { // 組件掛載a}, created(){} // 數(shù)據(jù)獲取 beforeMount() {}, // 數(shù)據(jù)獲取 data: () => ({}), //響應(yīng)式數(shù)據(jù) computed: {} // 計(jì)算屬性集合 methods: {} // 方法集合 ... // 銷毀頁面不要的資源 }
管理請(qǐng)求加載狀態(tài)
async beforeMount(){ // 開始加載 this.loading = true try { const data = await getUserInfo() } catch (error) { console.log(error) } finally { // 停止加載 this.loading = false } }
Proxy跨域
proxy: { "/api": { target: 'http://.......', changeOrigin: true, // 是否改變域名 ws: true, // socket pathRewrite: { // 路徑重寫 "/api": '' // 對(duì)拼接內(nèi)容進(jìn)行重寫 } }, .... }
對(duì)developer和build的打包進(jìn)行不同配置
大部分開發(fā)者都喜歡將Vue的config寫在一個(gè)文件中,看起來是沒有問題,但是隨著環(huán)境的變化,項(xiàng)目?jī)?yōu)化,WebPack插件,等等具有針對(duì)性的配置進(jìn)來后,就會(huì)顯得稍微雜亂了,這個(gè)時(shí)候就可以考慮做單獨(dú)的配置,通過process.dev分別對(duì)不同的環(huán)境進(jìn)行一個(gè)config的引入,下面貼出我的配置方式。我在項(xiàng)目根目錄下新建了一個(gè)config目錄,里面將公共的方法進(jìn)行拆包成一個(gè)public.js其他的根據(jù)生產(chǎn)環(huán)境和線下環(huán)境進(jìn)行一個(gè)區(qū)分的編譯。
-- config --- dev.js --- build.js --- public.js vue.config.js # 代碼 vue.config.js const devConfig = require('./config/dev') const buildConfig = require('./config/build') module.exports = process.env.NODE_ENV === 'development' ? devConfig : buildConfig
計(jì)算屬性實(shí)用
// 計(jì)算屬性 computed: { filterList: function () { return this.showData.filter(function (data) { // 返回需要顯示的數(shù)據(jù) return data.isShow }) } // DOM <ul> <li v-for="item in filterList" :key="item.id"> {{ item.name }} </li> </ul>
集合方法
tableFactory(action) { switch (action) { case 'update': ... break; case 'create': ... break; case 'delete': ... break; default: // ...默認(rèn)獲取列表 break; } }
保持對(duì)Props的數(shù)據(jù)驗(yàn)證規(guī)范
props: { test: { type: String, default: '' }, test2: { type: [Number, String], default: 1 }, test3: { required: false, type: Object } }
組件名稱使用
大多時(shí)候,我們?cè)诮M件中定義的name都是作為在template模板中使用的名稱,這里建議使用駝峰命名,因?yàn)樵趘ue中對(duì)駝峰命名做出了很好的解析。
// GanMessage.vue組件 export default { name: 'GanMessage' ..... } // 引入后使用 components: { [GanMessage.name]: GanMessage } // 模板中使用 <template> <gan-message/> </template>
模板引擎調(diào)試
大多數(shù)時(shí)候,在template上面寫一些邏輯非常難調(diào)試,都是直接看效果的,對(duì)于一些值來說,變得無法掌控,所以說在開發(fā)環(huán)境中,我都會(huì)在原型上掛一個(gè)全局的console.log方法進(jìn)行調(diào)試
vue.prototype.$logs = window.console.log; // 使用 <template> {{$logs('1111')}} </template>
獲取數(shù)據(jù)的生命周期
對(duì)于數(shù)據(jù)的獲取一直都是又存在爭(zhēng)議的,大部分同學(xué)都是在created中獲取的吧,我個(gè)人是在beforeMount中進(jìn)行后臺(tái)數(shù)據(jù)請(qǐng)求獲取的
async beforeMount(){ const data = await getUserInfo(); }
使用async 和 await
大多數(shù)時(shí)候,在使用Promise的時(shí)候都是通過.then,.catch,.finally來進(jìn)行處理的。但其實(shí)我更加的推薦使用async異步函數(shù)的方式來進(jìn)行Pormise的處理,我們只需要進(jìn)行數(shù)據(jù)的獲取就好了,通過try異常捕獲可以快速的對(duì)錯(cuò)誤進(jìn)行一個(gè)好的排查和拋出。參考上面獲取數(shù)據(jù)的生命周期可以看到
async beforeMount(){ try { const data = await getUserInfo() } catch (error) { console.log(error) } finally {} }
watch
watch: { obj: { handler(newName, oldName) { console.log('obj.a changed'); }, immediate: true, deep:true }, 'obj.a': { handler(newName, oldName) { console.log('obj.a changed'); }, immediate: true, // deep: true } }
在自定義事件中,該值是從其子組件中捕獲的值
<!-- Child --> <template> <input type="text" @input="$emit('custom-event', 'hello')" /> </template> <!-- Parent --> <template> <Child @custom-event="handleCustomevent" /> </template> <script> export default { methods: { handleCustomevent (value) { console.log(value) // hello } } } </script>
總結(jié)
到此這篇關(guān)于Vue開發(fā)中常見的套路和技巧總結(jié)的文章就介紹到這了,更多相關(guān)Vue開發(fā)常見套路和技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2.0和mintui-infiniteScroll結(jié)合如何實(shí)現(xiàn)無線滾動(dòng)加載
這篇文章主要介紹了vue2.0和mintui-infiniteScroll結(jié)合如何實(shí)現(xiàn)無線滾動(dòng)加載,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10如何優(yōu)雅地在vue中添加權(quán)限控制示例詳解
這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅地在vue中添加權(quán)限控制的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03vue項(xiàng)目打包部署跨域的實(shí)現(xiàn)步驟
在前端 Vue 項(xiàng)目打包后,如果需要訪問另一個(gè)域名下的接口,由于瀏覽器的同源策略限制,會(huì)出現(xiàn)跨域問題,本文就介紹一下vue項(xiàng)目打包部署跨域的實(shí)現(xiàn)步驟,感興趣的可以了解一下2023-05-05vue實(shí)現(xiàn)web前端登錄頁數(shù)字驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)web前端登錄頁數(shù)字驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06解決vue中axios設(shè)置超時(shí)(超過5分鐘)沒反應(yīng)的問題
這篇文章主要介紹了解決vue中axios設(shè)置超時(shí)(超過5分鐘)沒反應(yīng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09詳解Vue iview IE瀏覽器不兼容報(bào)錯(cuò)(Iview Bable polyfill)
這篇文章主要介紹了Vue iview IE瀏覽器不兼容報(bào)錯(cuò)的決絕方法,由于Iview編譯使用到了es6的一些新特性,但是在IE中不支持ES6的新特性,本文就介紹一下如何解決這些問題2019-01-01在vue-cli搭建的項(xiàng)目中增加后臺(tái)mock接口的方法
這篇文章主要介紹了在vue-cli搭建的項(xiàng)目中增加后臺(tái)mock接口的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04