vue.js的幾個小技巧
第一招:化繁為簡的Watchers
場景還原:
created(){
this.fetchPostList()
},
watch:{
searchInputValue(){
this.fetchPostList()
}
}
元件建立的時候我們獲取一次列表,同時監聽input框,每當發生變化的時候重新獲取一次篩選後的列表這個場景很常見,有沒有辦法優化一下呢?
招式解析:
首先,在watchers中,可以直接使用函式的字面量名稱;其次,宣告immediate:true表示建立元件時立馬執行一次。
watch:{
searchInputValue:{
handler:'fetchPostList',
immediate:true
}
}
第二招:一勞永逸的元件註冊
場景還原:
created(){
this.fetchPostList()
},
watch:{
searchInputValue(){
this.fetchPostList()
}
}
<BaseInput
v-model="searchText"
@keydown.enter="search"
/>
<BaseButton@click="search">
<BaseIconname="search"/>
</BaseButton>
我們寫了一堆基礎UI元件,然後每次我們需要使用這些元件的時候,都得先import,然後宣告components,很繁瑣!秉持能偷懶就偷懶的原則,我們要想辦法優化!
招式解析:
我們需要藉助一下神器webpack,使用 require.context() 方法來建立自己的(模組)上下文,從而實現自動動態require元件。這個方法需要3個引數:要搜尋的資料夾目錄,是否還應該搜尋它的子目錄,以及一個匹配檔案的正則表示式。
我們在components資料夾新增一個叫global.js的檔案,在這個檔案裡藉助webpack動態將需要的基礎元件統統打包進來。
import Vuefrom'vue'
functioncapitalizeFirstLetter(string){
returnstring.charAt(0).toUpperCase()+string.slice(1
)}
constrequireComponent=require.context(
'.',false,/\.vue$/
//找到components資料夾下以.vue命名的檔案
)
requireComponent.keys().forEach(fileName=>{
constcomponentConfig=requireComponent(fileName)
constcomponentName=capitalizeFirstLetter(
fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')
//因為得到的filename格式是: './baseButton.vue', 所以這裡我們去掉頭和尾,只保留真正的檔名
)
Vue.component(componentName,componentConfig.default||componentConfig)
})
最後我們在main.js中import 'components/global.js',然後我們就可以隨時隨地使用這些基礎元件,無需手動引入了。
(雖然是轉載,不過我測試了,很好用,實錘,就是維護起來不知道你程式碼的人,不太理解怎麼寫的)
第三招:釜底抽薪的router key
場景還原:
下面這個場景真的是傷透了很多程式設計師的心…先預設大家用的是Vue-router來實現路由的控制。
假設我們在寫一個部落格網站,需求是從/post-page/a,跳轉到/post-page/b。然後我們驚人的發現,頁面跳轉後資料竟然沒更新?!原因是vue-router”智慧地”發現這是同一個元件,然後它就決定要複用這個元件,所以你在created函式裡寫的方法壓根就沒執行。通常的解決方案是監聽$route的變化來初始化資料,如下:
data(){
return{
loading:false,
error:null,
post:null
}
},
watch:{
'$route':{
handler:'resetData',
immediate:true
}
},
methods:{
resetData(){
this.loading=false
this.error=null
this.post=null
this.getPost(this.$route.params.id)
},
getPost(id){
}
}
bug是解決了,可每次這麼寫也太不優雅了吧?秉持著能偷懶則偷懶的原則,我們希望程式碼這樣寫:
data(){
return{
loading:false,
error:null,
post:null
}
},
created(){
this.getPost(this.$route.params.id)
},
methods(){
getPost(postId){
// ...
}
}
招式解析:
那要怎麼樣才能實現這樣的效果呢,答案是給router-view新增一個unique的key,這樣即使是公用元件,只要url變化了,就一定會重新建立這個元件。(雖然損失了一丟丟效能,但避免了無限的bug)。同時,注意我將key直接設定為路由的完整路徑,一舉兩得。
<router-view :key="$route.fullpath"></router-view>
(親測,可以,有些類似java的ssm框架 向後臺送請求總願意在後面加個隨機數,保證都是新請求,不過確實消耗資源)
第四招: 無所不能的render函式
場景還原:
vue要求每一個元件都只能有一個根元素,當你有多個根元素時,vue就會給你報錯
<template>
<li
v-for="route in routes"
:key="route.name"
>
<router-link:to="route">
{{route.title}}
</router-link>
</li>
</template>
ERROR-Component template should contain exactly one rootelement.
Ifyou areusingv-ifon multipleelements,usev-else-if
tochain theminstead.
招式解析:
那有沒有辦法化解呢,答案是有的,只不過這時候我們需要使用render()函式來建立HTML,而不是template。其實用js來生成html的好處就是極度的靈活功能強大,而且你不需要去學習使用vue的那些功能有限的指令API,比如v-for, v-if。(reactjs就完全丟棄了template)
functional:true,
render(h,{props}){
returnprops.routes.map(route=>
<likey={route.name}>
<router-linkto={route}>
{route.title}
</router-link>
</li>
)
}
第五招:無招勝有招的高階元件
劃重點:這一招威力無窮,請務必掌握
當我們寫元件的時候,通常我們都需要從父元件傳遞一系列的props到子元件,同時父元件監聽子元件emit過來的一系列事件。舉例子:
//父元件
<BaseInput
:value="value"
label="密碼"
placeholder="請填寫密碼"
@input="handleInput"
@focus="handleFocus>
</BaseInput>
//子元件
<template>
<label>
{{ label }}
<input
:value="value"
:placeholder="placeholder"
@focus=$emit('focus', $event)"
@input="$emit('input', $event.target.value)"
>
</label>
</template>
有下面幾個優化點:
1.每一個從父元件傳到子元件的props,我們都得在子元件的Props中顯式的宣告才能使用。這樣一來,我們的子元件每次都需要申明一大堆props, 而類似placeholer這種dom原生的property我們其實完全可以直接從父傳到子,無需宣告。方法如下:
<input
:value="value"
v-bind="$attrs"
@input="$emit('input', $event.target.value)"
>
$attrs包含了父作用域中不作為 prop 被識別 (且獲取) 的特性繫結 (class 和 style 除外)。當一個元件沒有宣告任何 prop 時,這裡會包含所有父作用域的繫結,並且可以通過 v-bind=”$attrs” 傳入內部元件——在建立更高層次的元件時非常有用。
2.注意到子元件的@focus=$emit('focus', $event)"其實什麼都沒做,只是把event傳回給父元件而已,那其實和上面類似,我完全沒必要顯式地申明:
<input
:value="value"
v-bind="$attrs"
v-on="listeners"
>
computed:{
listeners(){
return{
...this.$listeners,
input:event=>
this.$emit('input',event.target.value)
}
}
}
相關推薦
vue.js的幾個小技巧
第一招:化繁為簡的Watchers場景還原:created(){this.fetchPostList()},watch:{searchInputValue(){this.fetchPostList()}}元件建立的時候我們獲取一次列表,同時監聽input框,每當發生變化的時候
NuGet的幾個小技巧
com packages 影響 頁面 兼容 images eight 記錄 cef 因為可視化庫程序包管理器的局限性,有很多需要的功能在界面中無法完成。 以下技巧均需要在“程序包管理器控制臺”中使用命令來完成。 一、改變項目目標框架後,更新程序包 當改變項目的目標框架後,無
高效的幾個小技巧
編碼格式 輸出 indent 默認 asc encode mps family 寫入 json json 序列化dumps之後,數據會變成很長的一行,如果,數據量非常大就會相當不易查看,使用indent參數來輸出便於查看的JSON。 如: { "終點站": "貴陽站", "
技術好卻進不了大公司?iOS程序員面試的幾個小技巧你可要收好了
朋友 知識 了解 一點 今天 刪除 就會 為什麽 年輕 前言: 有很多程序員,專業技術挺好,項目經驗充足,簡歷上金碧輝煌,也面試了很多國內大廠,但就是沒有一家能成功的。處境可以說是相當尷尬。 大家都知道程序員本身就是要吃年輕飯,不僅是技術活,也是體力活。早點跳槽,早點漲薪,
Vue.js 的一個小技巧---利用v-for中的index值,來實現隔行變色
type 樣式 lin class idt title mes har oct 首先定義好樣式,利用v-for中的index值,然後綁定樣式來實現隔行變色效果。 以下為完整代碼,很簡單,但也是個技巧。 <!DOCTYPE html> &
第八天,scrapy的幾個小技巧
一次 load 動態 content btn ajax加載 select efi def 一. 微博模擬登陸 1. 百度搜微博開放平臺可滿足爬取量不大的情況 2. 微博模擬登陸和下拉鼠標應對ajax加載 from selenium import webdriver
NetLogo程式設計的幾個小技巧
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
乾貨:閱讀跟蹤 Java 原始碼的幾個小技巧!
今天跟大家分享一下我平時閱讀原始碼的幾個小技巧,對於閱讀Java中介軟體如Spring、Dubbo等框架原始碼的同學有一定幫助。 本文基於Eclipse IDE,我們每天都使用的IDE其實提供了很多強大的功能,掌握它們,往往能夠事半功倍。 1、Quick Type Hierarchy 快速檢視類繼承體
PuTTY幾個小技巧
增加視窗儲存的輸出 執行了一個命令,輸出了好多東西,但是預設的配置下,PuTTY只儲存了最後200行的內容,滿足不了我們的需求。 我們可以在標題欄上點右鍵選擇 Change settings…,在配置視窗的左邊選擇Window,修改右邊的 Lines of scrollback,改大
Python中使用字典的幾個小技巧
讀取 只需要 管理 解包 領取 意思 創建 小技巧 其它 1 解包 所謂解包,就是將字典通過 ** 操作符轉為 Key=Value 的形式,這種形式可以直接傳給函數作為關鍵字參數。 說說適用的幾種情況。 1.1 搜索拼接條件 當應用中使用類似 SQLAlchemy 的 OR
ACM中的幾個小技巧(離散化,尺取法,資料預處理)
離散化 使用STL演算法離散化: 思路:先排序,再刪除重複元素,然後就是索引元素離散化後對應的值。 假定待離散化的序列為a[n],b[n]是序列a[n]的一個副本,則對應以上三步為: sor
安裝Oracle Grid的過程中用到的幾個小技巧
1.利用檔案來模擬塊裝置 在grid的安裝教程中有一步是 provision the disk devices for use with ASM Filter Driver。但是如果我們沒有多個磁碟怎麼辦,這時可以這樣, 先dd出幾個檔案,例如: dd bs=30M count=1024 i
使用解構的幾個小技巧
本文內容來自Nicholas C. Zakas的《Understanding ECMAScript 6》。 ES6簡化了從物件和陣列中獲取資料的方法,解構可以把一個數據結構拆分成任意小的部分。我們在開發中經常使用物件和陣列的解構來簡化程式碼,以下幾個很有用但經常被忽略的用法。 Value Swapping
提高工作效率的幾個小技巧
圖片發自簡書App 一:json解析工具提供線上JSON工具,線上,JSON,JSON校驗,JSON格式化,xml轉json工具,線上工具,json檢視,視覺化,程式,伺服器,域名註冊,正則表示式,測試,線上json格式化工具二:Bootstrap視覺化佈局系統Layout
linux cd 命令的幾個小技巧
轉載:http://hi.baidu.com/pie138/item/488ebf5eac9e23404eff200b 說linux cd命令是Linux上使用率最高的兩個命令之一不為過吧(另一個當然是ls了),前兩天看到了一個linux cd命令的幾個小技巧,這裡順便記
技術好卻進不了大公司?程式設計師面試的幾個小技巧請收好
有很多程式設計師,專業技術挺好,專案經驗充足,簡歷上金碧輝煌,也面試了很多國內大廠,但就是沒有一家能成功的。處境可以說是相當尷尬。 大家都知道程式設計師本身就是要吃年輕飯,不僅是技術活,也是體力活。早點跳槽,早點漲薪,就顯得格外的重要了。 那麼我就給大家分享一下程式設計師面試的幾個小技巧: 1.面試準備要
Chrome瀏覽器F12開發者工具的幾個小技巧總結
1、直接修改頁面元素 選擇頁面上元素,右鍵“檢查”,會開啟開發者工具視窗,顯示當前選擇元素的原始碼,可以雙擊進行修改。 如果要修改的東西比較多,可以摺疊元素並單擊選擇,再右鍵Edit as HTML修改。2、顏色取色器 選擇頁面上元素,右鍵“檢查”,會開啟開發者工具
ORCAD 幾個小技巧記錄
從concept 轉向ORCAD,還在摸索這個軟體中。記錄一些學到的小技巧。 1、按住ctrl同時拖拽器件,即為複製。 2、按住Alt同時拖拽器件,則沒有“橡皮筋”功能。 3、畫wire時,同時按住shift,可以實現任意角度走線。 4、關於repeat的使用,目前發
【轉載】python 提高效率的幾個小技巧
1.1. 最常見 一個最常見的速度陷坑(至少是俺在沒看到網上這篇介紹時陷進去 過好些次的) 是: 許多短字串併成長字串時, 大家通常會用: Toggle line numbers 1 shortStrs = [ str0, str1, ..., strN]
UE4關於材質的幾個小技巧
相信很多程式出生的開發者對美術不是很瞭解 但是開發過程中又需要美術部分的一些技巧, 今天我就來安利一些UE4美術方面的技巧 希望能夠幫助到大家 1,不用 PS 也可以製作法線 2.製作毛玻璃 3,次表面材質 4,Fresne