淺談vue項目重構(gòu)技術(shù)要點和總結(jié)
前言
最近太忙了,博客好久沒有更新了。今天忙里偷閑,簡單總結(jié)一下最近vue項目重構(gòu)的一些技術(shù)要點。
vue數(shù)據(jù)更新, 視圖未更新
這個問題我們經(jīng)常會遇到,一般是vue數(shù)據(jù)賦值的時候,vue數(shù)據(jù)變化了,但是視圖沒有更新。這個不算是項目重構(gòu)的技術(shù)要點,也和大家分享一下vue2.0通常的解決方案吧!
解決方案如下:
1、通過vue.set方式賦值
Vue.set(數(shù)據(jù)源, key, newValue)
2、 通過Array.prototype.splice方法
數(shù)據(jù)源.splice(indexOfItem, 1, newValue)
3、修改數(shù)據(jù)的長度
數(shù)據(jù)源.splice(newLength)
4、變異方法
Vue.js 包裝了被觀察數(shù)組的變異方法,故它們能觸發(fā)視圖更新。被包裝的方法有:
push() pop() shift() unshift() splice() sort() reverse()
prop 對象數(shù)組應(yīng)用
在 JavaScript 中對象和數(shù)組是引用類型,指向同一個內(nèi)存空間,如果 prop 是一個對象或數(shù)組, 在子組件內(nèi)部改變它會影響父組件的狀態(tài) 。利用這一點,我們在子組件中改變prop數(shù)組或者對象,父組件以及所有應(yīng)用到prop中數(shù)據(jù)的地方都會變化。我之前寫過一篇js深拷貝和淺拷貝的文章,感興趣的去看下,其實,原理是一致的。
案例如下:
<input class="pinput max" type="text" v-model="itemData.data.did">
<script>
export default {
components: {
},
data() {
},
props: {
itemData: Object
},
methods: {
}
};
</script>
所有應(yīng)用到itemData的地方都會變化!
上面這種改變prop,Vue 不會在控制臺給出警告,假如我們完全改變或者賦值prop,控制臺會發(fā)出警告!引用官方給出的解決方案如下:
1、定義一個局部變量,并用 prop 的值初始化它:
props: ['initialCounter'],
data: function () {
return { counter: this.initialCounter }
}
2、定義一個計算屬性,處理 prop 的值并返回:
props: ['size'],
computed: {
normalizedSize: function () {
return this.size.trim().toLowerCase()
}
}
v-model 的一些坑
其實v-model和sync都是一些語法糖,我之前有文章介紹過,官網(wǎng)也能找到類似的案例!
v-model 數(shù)據(jù)有時候是undefined的時候,不會報錯,所以,一定要注意,v-model不能是undefined,否則有些莫名的問題!
重構(gòu)-動態(tài)組件的創(chuàng)建
有時候我們有很多類似的組件,只有一點點地方不一樣,我們可以把這樣的類似組件寫到配置文件中,動態(tài)創(chuàng)建和引用組件
方法一:component 和is配合使用
通過使用保留的 元素,并對其 is 特性進行動態(tài)綁定,你可以在同一個掛載點動態(tài)切換多個組件:
var vm = new Vue({
el: '#example',
data: {
currentView: 'home'
},
components: {
home: { /* ... */ },
posts: { /* ... */ },
archive: { /* ... */ }
}
})
<component v-bind:is="currentView">
<!-- 組件在 vm.currentview 變化時改變! -->
</component>
方法二:通過render方法創(chuàng)建
<script>
export default {
data() {
return {
};
},
render: function(createElement) {
let _type = bi.chart.data.type;
let _attr = bi.chart.components[_type]["attr"];
return createElement(_attr, {
props: {
}
});
}
};
</script>
bi.chart.components[_type]["attr"]這個是在配置文件中動態(tài)配置的,type點擊的時候會改變,會取不同type下面的attr屬性!
公共屬性抽離
我們在項目中,經(jīng)常會用很多狀態(tài)或者數(shù)據(jù),我們可以把很多公共數(shù)據(jù)抽離出來,放到一個對象中,后面我們可以監(jiān)聽這個數(shù)據(jù)對象變化。進行數(shù)據(jù)保存或者獲取。
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true
},
// 該回調(diào)將會在偵聽開始之后被立即調(diào)用
d: {
handler: function (val, oldVal) { /* ... */ },
immediate: true
},
可以利用上面深度監(jiān)聽。假如初始化的時候要立即執(zhí)行,我們可以用立即執(zhí)行監(jiān)聽!
require動態(tài)加載依賴
我們可以利用require同步特性,在代碼中動態(tài)加載依賴,例如下面echart主題,我們可以點擊切換的時候,動態(tài)加載!
require("echarts/theme/"+ data.theme);
import加載要放到頭部,初始化的時候,可以把默認(rèn)主題用import加載進來!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于vue的語法規(guī)則檢測報錯問題的解決
在配置路有的時候,陸續(xù)出現(xiàn)了各種報錯其中最多的是一些寫法,例如空格,縮進,各種括號,這篇文章主要介紹了關(guān)于vue的語法規(guī)則檢測報錯問題的解決,非常具有實用價值,需要的朋友可以參考下2018-05-05
vue+mousemove實現(xiàn)鼠標(biāo)拖動功能(拖動過快失效問題解決方法)
這篇文章主要介紹了vue+mousemove實現(xiàn)鼠標(biāo)拖動功能,文中給大家介紹了鼠標(biāo)移動過快拖動就失效問題的解決方法,需要的朋友可以參考下2018-08-08
實例詳解vue.js淺度監(jiān)聽和深度監(jiān)聽及watch用法
這篇文章主要介紹了vue.js淺度監(jiān)聽和深度監(jiān)聽及watch用法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧2018-08-08

