亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié)

 更新時(shí)間:2018年01月23日 09:34:05   作者:haorooms  
這篇文章主要介紹了淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

最近太忙了,博客好久沒有更新了。今天忙里偷閑,簡(jiǎn)單總結(jié)一下最近vue項(xiàng)目重構(gòu)的一些技術(shù)要點(diǎn)。

vue數(shù)據(jù)更新, 視圖未更新

這個(gè)問(wèn)題我們經(jīng)常會(huì)遇到,一般是vue數(shù)據(jù)賦值的時(shí)候,vue數(shù)據(jù)變化了,但是視圖沒有更新。這個(gè)不算是項(xiàng)目重構(gòu)的技術(shù)要點(diǎn),也和大家分享一下vue2.0通常的解決方案吧!

解決方案如下:

1、通過(guò)vue.set方式賦值

Vue.set(數(shù)據(jù)源, key, newValue)

2、 通過(guò)Array.prototype.splice方法

數(shù)據(jù)源.splice(indexOfItem, 1, newValue)

3、修改數(shù)據(jù)的長(zhǎng)度

數(shù)據(jù)源.splice(newLength)

4、變異方法

Vue.js 包裝了被觀察數(shù)組的變異方法,故它們能觸發(fā)視圖更新。被包裝的方法有:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

prop 對(duì)象數(shù)組應(yīng)用

在 JavaScript 中對(duì)象和數(shù)組是引用類型,指向同一個(gè)內(nèi)存空間,如果 prop 是一個(gè)對(duì)象或數(shù)組, 在子組件內(nèi)部改變它會(huì)影響父組件的狀態(tài) 。利用這一點(diǎn),我們?cè)谧咏M件中改變prop數(shù)組或者對(duì)象,父組件以及所有應(yīng)用到prop中數(shù)據(jù)的地方都會(huì)變化。我之前寫過(guò)一篇js深拷貝和淺拷貝的文章,感興趣的去看下,其實(shí),原理是一致的。

案例如下:

<input class="pinput max" type="text" v-model="itemData.data.did">

<script>
export default {
 components: {
 },
 data() {
 },
 props: {
 itemData: Object
 },
 methods: {
 }
};
</script>

所有應(yīng)用到itemData的地方都會(huì)變化!

上面這種改變prop,Vue 不會(huì)在控制臺(tái)給出警告,假如我們完全改變或者賦值prop,控制臺(tái)會(huì)發(fā)出警告!引用官方給出的解決方案如下:

1、定義一個(gè)局部變量,并用 prop 的值初始化它:

props: ['initialCounter'],
data: function () {
 return { counter: this.initialCounter }
}

2、定義一個(gè)計(jì)算屬性,處理 prop 的值并返回:

props: ['size'],
computed: {
 normalizedSize: function () {
 return this.size.trim().toLowerCase()
 }
}

v-model 的一些坑

其實(shí)v-model和sync都是一些語(yǔ)法糖,我之前有文章介紹過(guò),官網(wǎng)也能找到類似的案例!

v-model 數(shù)據(jù)有時(shí)候是undefined的時(shí)候,不會(huì)報(bào)錯(cuò),所以,一定要注意,v-model不能是undefined,否則有些莫名的問(wèn)題!

重構(gòu)-動(dòng)態(tài)組件的創(chuàng)建

有時(shí)候我們有很多類似的組件,只有一點(diǎn)點(diǎn)地方不一樣,我們可以把這樣的類似組件寫到配置文件中,動(dòng)態(tài)創(chuàng)建和引用組件

方法一:component 和is配合使用

通過(guò)使用保留的 元素,并對(duì)其 is 特性進(jìn)行動(dòng)態(tài)綁定,你可以在同一個(gè)掛載點(diǎn)動(dòng)態(tài)切換多個(gè)組件:

var vm = new Vue({
 el: '#example',
 data: {
 currentView: 'home'
 },
 components: {
 home: { /* ... */ },
 posts: { /* ... */ },
 archive: { /* ... */ }
 }
})
<component v-bind:is="currentView">
 <!-- 組件在 vm.currentview 變化時(shí)改變! -->
</component>

方法二:通過(guò)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"]這個(gè)是在配置文件中動(dòng)態(tài)配置的,type點(diǎn)擊的時(shí)候會(huì)改變,會(huì)取不同type下面的attr屬性!

公共屬性抽離

我們?cè)陧?xiàng)目中,經(jīng)常會(huì)用很多狀態(tài)或者數(shù)據(jù),我們可以把很多公共數(shù)據(jù)抽離出來(lái),放到一個(gè)對(duì)象中,后面我們可以監(jiān)聽這個(gè)數(shù)據(jù)對(duì)象變化。進(jìn)行數(shù)據(jù)保存或者獲取。

c: {
 handler: function (val, oldVal) { /* ... */ },
 deep: true
},
// 該回調(diào)將會(huì)在偵聽開始之后被立即調(diào)用
d: {
 handler: function (val, oldVal) { /* ... */ },
 immediate: true
},

可以利用上面深度監(jiān)聽。假如初始化的時(shí)候要立即執(zhí)行,我們可以用立即執(zhí)行監(jiān)聽!

require動(dòng)態(tài)加載依賴

我們可以利用require同步特性,在代碼中動(dòng)態(tài)加載依賴,例如下面echart主題,我們可以點(diǎn)擊切換的時(shí)候,動(dòng)態(tài)加載!

require("echarts/theme/"+ data.theme);

import加載要放到頭部,初始化的時(shí)候,可以把默認(rèn)主題用import加載進(jìn)來(lái)!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談vue+webpack項(xiàng)目調(diào)試方法步驟

    淺談vue+webpack項(xiàng)目調(diào)試方法步驟

    本篇文章主要介紹了淺談vue+webpack項(xiàng)目調(diào)試方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • vue無(wú)法加載文件C:\xx\AppData\Roaming\npm\vue.ps1系統(tǒng)禁止運(yùn)行腳本

    vue無(wú)法加載文件C:\xx\AppData\Roaming\npm\vue.ps1系統(tǒng)禁止運(yùn)行腳本

    這篇文章主要介紹了vue?:?無(wú)法加載文件?C:\xx\AppData\Roaming\npm\vue.ps1...系統(tǒng)上禁止運(yùn)行腳本問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • VUE3中watch和watchEffect的用法詳解

    VUE3中watch和watchEffect的用法詳解

    本文主要介紹了VUE3中watch和watchEffect的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • npm?ERR!?code?E404在vscode安裝插件時(shí)報(bào)錯(cuò)的兩種解決方案

    npm?ERR!?code?E404在vscode安裝插件時(shí)報(bào)錯(cuò)的兩種解決方案

    這篇文章主要給大家介紹了關(guān)于npm?ERR!?code?E404在vscode安裝插件時(shí)報(bào)錯(cuò)的兩種解決方案,關(guān)于這個(gè)問(wèn)題,通常是由于插件名稱輸入錯(cuò)誤、網(wǎng)絡(luò)問(wèn)題或插件已被刪除引起的,文中將兩種解決方法都介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • vue-prop父組件向子組件進(jìn)行傳值的方法

    vue-prop父組件向子組件進(jìn)行傳值的方法

    下面小編就為大家分享一篇vue-prop父組件向子組件進(jìn)行傳值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • vue進(jìn)入頁(yè)面加載數(shù)據(jù)緩慢實(shí)現(xiàn)loading提示過(guò)程

    vue進(jìn)入頁(yè)面加載數(shù)據(jù)緩慢實(shí)現(xiàn)loading提示過(guò)程

    這篇文章主要介紹了vue進(jìn)入頁(yè)面加載數(shù)據(jù)緩慢實(shí)現(xiàn)loading提示過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue使用枚舉類型實(shí)現(xiàn)HTML下拉框步驟詳解

    Vue使用枚舉類型實(shí)現(xiàn)HTML下拉框步驟詳解

    本文分步驟給大家介紹了Vue使用枚舉類型實(shí)現(xiàn)HTML下拉框的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Vue MVVM模型超詳細(xì)講解

    Vue MVVM模型超詳細(xì)講解

    MVVM是Model-View-ViewModel的縮寫,MVVM是一種設(shè)計(jì)思想,這篇文章主要介紹了Vue生命周期和MVVM框架,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • 教你用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果

    教你用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果

    最近做的兩個(gè)項(xiàng)目都是關(guān)于vue的,做完整理一下,這篇文章主要給大家介紹了關(guān)于如何用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • ant-design-vue時(shí)間線使用踩坑及解決

    ant-design-vue時(shí)間線使用踩坑及解決

    這篇文章主要介紹了ant-design-vue時(shí)間線使用踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論