一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

得心應(yīng)用的Vue高級(jí)技巧

 過(guò)河卒沖 2020-04-12
加入我們一起學(xué)習(xí),天天進(jìn)步

1,require.context()

一個(gè)webpack的api,通過(guò)執(zhí)行require.context函數(shù)獲取一個(gè)特定的上下文,主要用來(lái)實(shí)現(xiàn)自動(dòng)化導(dǎo)入模塊,在前端工程中,如果遇到從一個(gè)文件夾引入很多模塊的情況,可以使用這個(gè)api,它會(huì)遍歷文件夾中的指定文件,然后自動(dòng)導(dǎo)入,使得不需要每次顯式的調(diào)用import導(dǎo)入模塊

語(yǔ)法:
/** * directory {String} -說(shuō)明需要檢索的目錄 * useSubdirectories {Boolean} -是否遍歷文件的子目錄 * regExp {RegExp} - 匹配文件的正則 **/require.context(directory, useSubdirectories = false, regExp = /^.//);

場(chǎng)景:
1,開(kāi)發(fā)vue項(xiàng)目的時(shí)候一般都會(huì)開(kāi)發(fā)很多自定義的全局組件,

一般寫法是:這樣的話如果我們封裝了50個(gè)組件,那么就意味我們要寫50個(gè)相同的組件引入語(yǔ)句,50個(gè)注冊(cè)語(yǔ)句,大量的重復(fù)代碼:

如果使用require.context那么就可以是下面這個(gè)樣子,這樣我們可以無(wú)限的在components文件下添加組件,自動(dòng)注冊(cè)成全局的
const files = require.context('@/components', true, /^\.\/(\w*\/)+index\.(vue|js)$/)
export default { install (Vue) { files.keys().forEach((path) => { const type = this.typeof(path, files(path)) // 針對(duì)3中不同的組件設(shè)計(jì)模式提供不同的組件注冊(cè)策略 switch (type) { case 'component': this.installComonent(Vue, files(path)); break; case 'componentGroup': this.instalGroupComponent(Vue, files(path)); break; case 'serveApi': this.installServeApi(Vue, files(path)); break; } }) }, typeof (path, file) { if (path.lastIndexOf('.js') === -1) { return 'component' } else { if (file.default.install) { return 'serveApi' } else { return 'componentGroup' } } }, instalGroupComponent (Vue, file) { const components = file.default Object.keys(components).forEach((name) => { Vue.component('Nb'+name, components[name]) }) }, installComonent (Vue, file) { const options = file.default const name = options.name Vue.component('Nb'+name, options) }, installServeApi (Vue, file) { Vue.use(file.default) }}


2,開(kāi)發(fā)一個(gè)svg圖標(biāo)組件,可能需要很多svg文件,需要通過(guò)webpack打包,如果全部一個(gè)一個(gè)引入的話,會(huì)比較麻煩,如果使用context api的話可以直接讀取文件夾下的所有svg圖標(biāo)

2,watch

場(chǎng)景:

1,立即執(zhí)行
表格初始進(jìn)來(lái)需要調(diào)查詢接口 fetchList(),然后篩選條件的值發(fā)生改變會(huì)重新查詢
created(){ this.fetchList()},watch: { 'filters.type' () { this.fetchList() }}

可以直接利用 watch 的immediate和handler屬性簡(jiǎn)寫
watch: { 'filters.type': { handler: 'getList',    immediate: true }}

2,深度監(jiān)聽(tīng),
有時(shí)候我們可能需要監(jiān)聽(tīng)整個(gè)對(duì)象,還是上面那個(gè)例子,上面我們針對(duì)一個(gè)對(duì)象中的某個(gè)屬性進(jìn)行監(jiān)聽(tīng),但是這個(gè)對(duì)象中有很多屬性,任何一個(gè)屬性的改變我們都需要重新發(fā)起請(qǐng)求,那么我們可以利用watch的deep屬性進(jìn)行深度監(jiān)聽(tīng),也就是監(jiān)聽(tīng)復(fù)雜的數(shù)據(jù)類型
watch:{ filters: { handler(newVal,oldVal){ this.getList() }, deep:true, immediate: true }}

3,mixins
有些組件有些重復(fù)的 js 邏輯,比如我們常用的上啦加載更多,而上啦觸底事件就是我們每個(gè)需要上啦加載功能頁(yè)面都需要重復(fù)去寫的邏輯,這部分東西我們都可以使用mixins來(lái)實(shí)現(xiàn)


4,Vue.nextTick

2.1.0 新增 在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個(gè)方法,獲取更新后的 DOM
這個(gè)api的使用場(chǎng)景主要是為替代updated生命周期,有時(shí)候我們可能需要在數(shù)據(jù)更新后操作新的dom,但是updated生命周期是更新后執(zhí)行,但是無(wú)法確定是那個(gè)屬性的改變觸發(fā)的更新,而nextTick是可以寫在某個(gè)屬性改變的后面,這么我們就可以知道是那個(gè)屬性的改變了,功能其實(shí)和react,setState函數(shù)的第二個(gè)參數(shù)


4, Vue.filter  全局過(guò)濾器
過(guò)濾器的目的主要為了對(duì)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換(銀行卡號(hào)格式化,貨幣格式化,日期格式化,...)
那么我用computed計(jì)算屬性也可以呀,為什么要用filter,答案就是computed不能接受參數(shù)只能針對(duì)某一個(gè)vue內(nèi)部屬性進(jìn)行轉(zhuǎn)換,而filter可以接受參數(shù)
場(chǎng)景:時(shí)間戳轉(zhuǎn)化成年月日這是一個(gè)公共方法,所以可以抽離成過(guò)濾器使用
// 使用
// 在雙花括號(hào)中{{ message | capitalize }}
// 在 `v-bind` 中<div v-bind:id='rawId | formatId'></div>// 全局注冊(cè)Vue.filter('stampToYYMMDD', (value) =>{  // 處理邏輯})


// 局部注冊(cè)filters: {  stampToYYMMDD: (value)=> {    // 處理邏輯  }}
// 多個(gè)過(guò)濾器全局注冊(cè)// /src/common/filters.jslet dateServer = value => value.replace(/(\d{4})(\d{2})(\d{2})/g, '$1-$2-$3') export { dateServer }
// /src/main.jsimport * as custom from './common/filters/custom'Object.keys(custom).forEach(key => Vue.filter(key, custom[key]))


4, css 局部樣式
Vue中style標(biāo)簽的scoped屬性表示它的樣式只作用于當(dāng)前模塊,是樣式私有化.
渲染的規(guī)則/原理:
給HTML的DOM節(jié)點(diǎn)添加一個(gè) 不重復(fù)的data屬性 來(lái)表示 唯一性
在對(duì)應(yīng)的 CSS選擇器 末尾添加一個(gè)當(dāng)前組件的 data屬性選擇器來(lái)私有化樣式
問(wèn)題:
使用了scoped屬性后,我們組件內(nèi)部的樣式無(wú)法在外部被控制,(怎么就是改不了樣式,... 我要瘋了咋沒(méi)反應(yīng)
解決方案:deep屬性
.result-tab /deep/ { .nav-bar { a { flex: initial; height: 50px; font-size: 36px; margin-left: 40px; line-height: 100px; height: auto; } } .result-content { padding: 0 40px; }}

作者: 長(zhǎng)滿頭發(fā)的程序員

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品香蕉一级免费| 日韩在线视频精品视频| 欧美极品欧美精品欧美| 欧美日韩中国性生活视频| 亚洲欧美日本成人在线| 精产国品一二三区麻豆| 久久99亚洲小姐精品综合| 欧美精品一区二区水蜜桃| 内射精子视频欧美一区二区| 亚洲欧美国产精品一区二区| 日韩免费成人福利在线| 护士又紧又深又湿又爽的视频| 亚洲精品蜜桃在线观看| 中文字幕91在线观看| 肥白女人日韩中文视频| 亚洲国产丝袜一区二区三区四| 亚洲中文字幕视频一区二区| 国产精品免费福利在线| 午夜福利激情性生活免费视频| 久久热在线视频免费观看| 欧美韩日在线观看一区| 亚洲精品欧美精品日韩精品| 欧美国产日韩变态另类在线看| 亚洲午夜av一区二区| 色播五月激情五月婷婷| 国产对白老熟女正在播放| 少妇人妻精品一区二区三区| 色哟哟哟在线观看视频| 最新日韩精品一推荐日韩精品| 国产主播精品福利午夜二区| 激情五月激情婷婷丁香| 免费观看成人免费视频| 五月天丁香婷婷狠狠爱| 黑丝袜美女老师的小逼逼| 人人妻人人澡人人夜夜| 国产大屁股喷水在线观看视频| 国产午夜精品福利免费不| 亚洲精品欧美精品一区三区| 欧美一区二区三区播放| 精品推荐国产麻豆剧传媒| 午夜精品一区二区三区国产|