最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中動態(tài)引進組件、動態(tài)引進js模塊文件方式

 更新時間:2026年05月31日 10:23:55   作者:賞花賞景賞時光  
本文詳細(xì)介紹了Vue中動態(tài)引入組件和JS模塊文件的方法與應(yīng)用場景,包括包括通過動態(tài)引入組件和解決組件資源浪費問題is通過動態(tài)引入JS模塊文件is優(yōu)化解決第三方業(yè)務(wù)個性化需求導(dǎo)致的資源加載浪費問題為Vue開發(fā)提供了優(yōu)化方案

本文主要介紹vue內(nèi)容如下:

1、在.vue文件中動態(tài)引進組件

2、在.vue文件中動態(tài)引進js模塊文件

一、動態(tài)引進組件

動態(tài)引進組件原因:在實際業(yè)務(wù)中,比如訂單詳情頁面detail.vue,里面包含了多個第三業(yè)務(wù)的訂單詳情,但是不同的業(yè)務(wù)詳情頁面區(qū)別又很大,所以只能根據(jù)不同的業(yè)務(wù)來源,書寫不同的詳情組件,在根據(jù)業(yè)務(wù)來源展示相應(yīng)的組件

問題:如果詳情對接的業(yè)務(wù)來源越來越多,并且不同的來源對于詳情頁面定制化需求又高,這樣就會增加越來越多的組件,如果在頁面都是直接引進組件,那么沒用到的組件就會造成資源浪費,導(dǎo)致頁面文件大,并在加載時間變長

一般寫法如下,頁面中用到的組件都直接引進來

<template>
  <div>
    <Bcomponent v-if="isShowBComponent" />
    <CComponent v-else-if="isShowCComponent" />
    <p v-else-if="isShowPage">show another something</p>
  </div>
</template>
<script>
// 直接引進來,不必要的組件也加載,造成頁面體積增大
import BComponent from './b.vue'
import CComponent from './c.vue'
export default {
  data() {
    return {
      isShowBComponent: false,
      isShowCComponent: false,
      isShowPage: false,
      condition: 0
    }
  },
  components: {
    BComponent,
    CComponent
  },
  mounted() {
    this.gtDataFromInterface()
  },
  methods: {
    gtDataFromInterface() {
      // 通過接口拿到數(shù)據(jù)后,根據(jù)字段返回值,確定要展示那個組件,比如接口返回字段condition,根據(jù)它的返回值展示
      // 在這里賦值
      this.condition = condition
      this.handleShowPage()
    },
    handleShowPage() {
      if (this.condition === 1) {
        this.isShowBComponent = true
      } else if (this.condition === 1) {
        this.isShowCComponent = false
      } else {
        this.isShowPage = true
      }
    }
  }
}
</script>

動態(tài)引進vue組件寫法,和上面寫法不同的地方就是引進組件的方式不一樣

動態(tài)引進組件語法:

  • a)在components屬性里面用這種方式引進組件:BComponent: () => {'./b.vue'}
  • b)在template中用v-if控制展示:<BComponent v-if="isShowBComponent" />
  • c)在符合的條件下將isShowBComponent設(shè)置為true
<template>
  <div>
    <Bcomponent v-if="isShowBComponent" />
    <CComponent v-else-if="isShowCComponent" />
    <p v-else-if="isShowPage">show another something</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isShowBComponent: false,
      isShowCComponent: false,
      isShowPage: false,
      condition: 0
    }
  },
  components: {
    // 動態(tài)引進,當(dāng)isShowBComponent=true的時候,才會真正加載BComponent組件文件
    BComponent: () => import('./b.vue'),
    CComponent: () => import('./c.vue')
  },
  mounted() {
    this.gtDataFromInterface()
  },
  methods: {
    gtDataFromInterface() {
      // 通過接口拿到數(shù)據(jù)后,根據(jù)字段返回值,確定要展示那個組件,比如接口返回字段condition,根據(jù)它的返回值展示
      // 在這里賦值
      this.condition = condition
      this.handleShowPage()
    },
    handleShowPage() {
      if (this.condition === 1) {
        this.isShowBComponent = true
      } else if (this.condition === 1) {
        this.isShowCComponent = false
      } else {
        this.isShowPage = true
      }
    }
  }
}
</script>

特殊說明:

1、當(dāng)路由放在<keep-alive>里面,則vue文件里面就有activated屬性

2、如果BComponent里面有activated屬性

動態(tài)引進的化,BComponent的activated里面的方法就不會執(zhí)行

 components: {
    // 動態(tài)引進,當(dāng)isShowBComponent=true的時候,才會真正加載BComponent組件文件
    BComponent: () => import('./b.vue'),
    CComponent: () => import('./c.vue')
  }

如果不用動態(tài)引進組件的方式,則BComponent的activated里面的方法會執(zhí)行

動態(tài)引進activated里面的方法不執(zhí)行原因:

在初始化組件的聲明周期方法的時候,就會對activated進行收集,如果是動態(tài)引進,則當(dāng)文件加載完成時候,已經(jīng)過了activated進行收集的時機,那么自然BComponent的activated里面的方法不會執(zhí)行

二、在.vue文件中動態(tài)引進js模塊文件

動態(tài)引進原因:比如payResult.vue文件表示支付結(jié)果頁面,現(xiàn)實中我們有很多第三方業(yè)務(wù)場景在支付完成之后跳轉(zhuǎn)到支付結(jié)果頁面,在該頁面不同的第三方業(yè)務(wù)會有一些個性化的需求,比如A、B業(yè)務(wù)需要做分享功能,C業(yè)務(wù)不需要做分享功能,這時候我們將分享功能的一些邏輯處理放在了handle.js文件里面,share.vue表示分享組件。這時候如果不區(qū)分業(yè)務(wù)來源,一進頁面統(tǒng)一加載handle.js  share.vue組件,那么C業(yè)務(wù)本身不需要分享功能,但也加載了分享的相關(guān)文件,這會造成不必要的資源加載,浪費頁面渲染性能

理想狀態(tài):根據(jù)業(yè)務(wù)來源,當(dāng)為A、B業(yè)務(wù)的時候才加載分享相關(guān)文件,當(dāng)為C業(yè)務(wù)則不加載,這時候就需要動態(tài)引進js模塊文件了

動態(tài)引進大概流程

  • 1)一般進頁面可能會調(diào)相應(yīng)的接口拿數(shù)據(jù),比如訂單詳情接口,該接口返回的數(shù)據(jù)可能有可以區(qū)分業(yè)務(wù)來源的字段,比如processNo
  • 2)可以根據(jù)processNo來動態(tài)引進handle.js
  • 3)動態(tài)引進js文件語法:import('./share.js').then(res => {}),res為object,是share.js導(dǎo)出的內(nèi)容,如果有具名導(dǎo)出為aa和默認(rèn)導(dǎo)出,則結(jié)果為res.default,res.aa

示例代碼如下:

payResult.vue

<template>
  <div>
    <Sahre  :isShow="shareData.isShow" :dataInfo="shareData.dataInfo" @click="shareData.closeEvent"/>
  </div>
</template>
<script>
export default {
  components: {
    // 動態(tài)引進組件
    Share: () => import('./share.vue')
  },
  data() {
    return {
      shareData: {
        isShow: false,         // 控制組件的顯隱,
        dataInfo: {},          // 組件的數(shù)據(jù)
        closeEvent: () => {}   // 組件的關(guān)閉事件
      }
    }
  },
  mounted() {
    this.getInitData()
  },
  methods: {
    getInitData() {
      // 通過接口拿到數(shù)據(jù),判斷是某服務(wù),serviceName
      let flag1 = serviceName === 'daiJia'
      let flag2 = serviceName === 'battery'
      if (flag1 || flag2) {
        // 這種動態(tài)引進的方式,會返回一個Promise
        import('./share.js').then(res => {
          // share.js是默認(rèn)導(dǎo)出,所以通過res.default拿到數(shù)據(jù)
          this.shareData = res.default
          // 根據(jù)相應(yīng)的服務(wù),調(diào)用相應(yīng)的方法
          if (flag1) {
            // 這里要把組件實例傳過去
            this.shareData.getSetDaiJiaData(this)
          } else if (flag2) {
            this.shareData.getSetBatteryData(this)
          }
        })
      }
    }
  }
}
</script>

share.js

export default {
  isShow: false,
  dataInfo: {},
  closeEvent: () => {
    // 注意這里要用箭頭函數(shù),才能拿到this對象,并且this指向的是該文件導(dǎo)出的內(nèi)容,即有個default屬性的對象
    // 如果用一般的聲明方式,則this為null
    this.default.isShow = false
  },
  getSetDaiJiaData(vm) {
    // 通過接口那數(shù)據(jù)
    // 這里不能通過this.$store去訪問,需要在調(diào)用的地方傳vm進來
    vm.$store.dispatch('').then(res => {
      this.isShow = res.isShow
      this.dataInfo = res.data
    }).catch(err => {
      console.error(err)
    })
  },
  getSetBatteryData(vm) {
    // 通過接口那數(shù)據(jù)
    vm.$store.dispatch('').then(res => {
      this.isShow = res.isShow
      this.dataInfo = res.dataInfo
    }).catch(err => {
      console.error(err)
    })
},
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue data的數(shù)據(jù)響應(yīng)式到底是如何實現(xiàn)的

    Vue data的數(shù)據(jù)響應(yīng)式到底是如何實現(xiàn)的

    這篇文章主要介紹了Vue data的數(shù)據(jù)響應(yīng)式到底是如何實現(xiàn)的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Vue3使用axios實現(xiàn)Ajax請求過程

    Vue3使用axios實現(xiàn)Ajax請求過程

    這段文章詳細(xì)介紹了axios在Vue.js項目中的應(yīng)用,包括如何引入axios、發(fā)送GET和POST請求、處理響應(yīng)數(shù)據(jù)等,通過實際示例展示了如何使用axios進行Ajax請求,適用于Vue.js開發(fā)者進行數(shù)據(jù)交互
    2026-05-05
  • vue計算屬性和監(jiān)聽器實例解析

    vue計算屬性和監(jiān)聽器實例解析

    本文通過基本實例給大家介紹了vue計算屬性和監(jiān)聽器的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • Vue3實現(xiàn)拖拽圖片四角調(diào)整圖片大小的示例詳解

    Vue3實現(xiàn)拖拽圖片四角調(diào)整圖片大小的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue3實現(xiàn)拖拽圖片四角調(diào)整圖片大小的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-10-10
  • Vue 組件間的樣式?jīng)_突污染

    Vue 組件間的樣式?jīng)_突污染

    本篇文章主要介紹了Vue 組件間的樣式?jīng)_突污染,當(dāng)多個樣式出現(xiàn)時,就會導(dǎo)致樣式?jīng)_突,本文介紹了具體解決方法
    2017-08-08
  • 詳解vuex commit保存數(shù)據(jù)技巧

    詳解vuex commit保存數(shù)據(jù)技巧

    這篇文章主要介紹了詳解vuex commit保存數(shù)據(jù)技巧,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue 動態(tài)給每個頁面添加title、關(guān)鍵詞和描述的方法

    vue 動態(tài)給每個頁面添加title、關(guān)鍵詞和描述的方法

    這篇文章主要介紹了vue 動態(tài)給每個頁面添加title、關(guān)鍵詞和描述的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Vue關(guān)閉當(dāng)前彈窗頁面的兩種方式

    Vue關(guān)閉當(dāng)前彈窗頁面的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue關(guān)閉當(dāng)前彈窗頁面的兩種方式,這是最近項目中遇到的一個需求,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • vue.js實現(xiàn)二級菜單效果

    vue.js實現(xiàn)二級菜單效果

    這篇文章主要為大家詳細(xì)介紹了vue.js實現(xiàn)二級菜單效果的具體方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • vuex直接賦值的三種方法總結(jié)

    vuex直接賦值的三種方法總結(jié)

    今天小編就為大家分享一篇vuex直接賦值的三種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論

漳平市| 保康县| 嵊州市| 合阳县| 汽车| 阳新县| 开阳县| 定襄县| 高唐县| 浮山县| 全南县| 耿马| 博白县| 迁安市| 涡阳县| 红河县| 郎溪县| 晋江市| 桂平市| 衡阳市| 长沙县| 尤溪县| 东莞市| 富顺县| 丰顺县| 平南县| 凤台县| 溧阳市| 循化| 裕民县| 仁化县| 同心县| 溧水县| 林周县| 招远市| 靖州| 夹江县| 天台县| 偏关县| 定远县| 永平县|