欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中mixins混入的介紹和使用詳解

 更新時(shí)間:2023年08月16日 11:08:02   作者:阿鎮(zhèn)吃橙子  
mixins(混入)是一種分發(fā)?Vue?組件中可復(fù)用功能的非常靈活的方式,這篇文章主要為大家介紹了mixins混入的介紹和使用,需要的可以參考下

當(dāng)項(xiàng)目越來(lái)越大,項(xiàng)目中組件之間可能會(huì)存在一些相似的功能,這就導(dǎo)致了在各個(gè)組件中需要編寫功能相同的代碼段,重復(fù)地定義這些相同的屬性和方法,導(dǎo)致代碼地冗余,還不利于后期代碼的維護(hù)。

一、什么是Mixins

mixins(混入):一種分發(fā) Vue 組件中可復(fù)用功能的非常靈活的方式,mixins 是一個(gè) js 對(duì)象,它可以包含我們組件script中的任意功能選項(xiàng),如:data、components、methods、created、computed 等等。我們只要將公用的功能以對(duì)象的方式傳入 mixins 選項(xiàng)中,當(dāng)組件使用 mixins 對(duì)象,所有 mixins 對(duì)象的選項(xiàng)都將被擴(kuò)展到該組件本身的選項(xiàng)中來(lái),這樣就可以提高代碼的重用性,并易于后期的代碼維護(hù)。

二、何時(shí)使用Mixins

當(dāng)存在多個(gè)組件中的數(shù)據(jù)或者功能很相近時(shí),我們就可以利用 mixins 將公共部分提取出來(lái),通過(guò) mixins 封裝函數(shù)。

三、如何創(chuàng)建Mixins

src 目錄下創(chuàng)建一個(gè) mixins 文件夾,在文件夾下新建一個(gè) myMixins.js 文件。因?yàn)?mixins 是一個(gè) js 對(duì)象,所以應(yīng)該以對(duì)象的形式來(lái)定義 myMixins。在對(duì)象中可以和 vue 組件一樣來(lái)定義 data、components、methods、created、computed 等屬性,并通過(guò) export 導(dǎo)出該對(duì)象。

四、如何使用Mixins

在需要調(diào)用的組件中引入 myMixins.js 文件,然后在 export default 中引入需要的對(duì)象即可。

五、Mixins的主要特性

1.方法和參數(shù)在不同的組件中不共享

當(dāng)某一個(gè)組件調(diào)用了 mixins 并將其屬性合并到自己組件中,其屬性只會(huì)被當(dāng)前這個(gè)組件所識(shí)別,也就是說(shuō)其他組件無(wú)法從當(dāng)前組件中獲取到 mixins 中的數(shù)據(jù)和方法,做到了很好的數(shù)據(jù)隔離效果。如下所示:

// 在 myMixins.js 中定義一個(gè) age 字段和 getAge 方法,用來(lái)獲取年齡信息
export const myMixins = {
  data() {
    return {
      age: 18,
    }
  },
  mounted() {
    this.getAge()
  },
  methods: {
    getAge() {
      console.log(this.age)
    }
  }
}
// 在第一個(gè)組件中引入 mixins,并且對(duì) age 加1 
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  created() {
    this.age++
  },
}
// 發(fā)現(xiàn)控制臺(tái)輸出 19,說(shuō)明當(dāng)前組件的 age 變化了 
// 在第二個(gè)組件中引入 mixins,但是不做任何處理
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
}
// 發(fā)現(xiàn)控制臺(tái)輸出 18,說(shuō)明當(dāng)前組件的 age 無(wú)影響

2.Mixins 合并沖突

當(dāng) mixins 的值為對(duì)象(components、methods 、computed、data),混入到某個(gè)組件中時(shí),選項(xiàng)會(huì)被合并。當(dāng)對(duì)象名稱沖突時(shí)優(yōu)先組件,組件中的值會(huì)覆蓋混入對(duì)象的。

// 混入myMixins.js對(duì)象中增加age屬性、getAge1方法、getAge2方法
export const myMixins = {
  components:{},
  data() {
    return {
      age: 18,
    }
  },
  methods: {
    getAge1() {
      console.log("age1 from mixins", this.age )
    },
    getAge2() {
      console.log("age2 from mixins", this.age )
    },
  }
}
// 組件中自帶age屬性、getAge1方法、getAge3方法;同時(shí)引入 mixins。
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {
      age: 20,
    }
  },
  mounted() {
    this.getAge1();
    this.getAge2();
    this.getAge3();
  },
  methods: {
    getAge1() {
      console.log('age1 from template', this.age)
    },
    getAge3() {
      console.log('age3 from template', this.age)
    },
  }
}
// 輸出控制臺(tái)發(fā)現(xiàn),組件中的age覆蓋了混合對(duì)象的age,組件的getAge1方法覆蓋了混合對(duì)象的getAge1方法
// age1 from template 20
// age2 from mixins 20
// age3 from template 20

當(dāng)值為函數(shù)(created、mounted)的選項(xiàng),混入到組件中時(shí),選項(xiàng)會(huì)被合并調(diào)用,混合對(duì)象里的鉤子函數(shù)在組件里的鉤子函數(shù)之前調(diào)用。

// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {}
  },
  created() {
    console.log('data from mixins')
  }
}
// 組件中引入 mixins
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  created() {
    console.log('data from template')
  }
}
// 先輸出混入對(duì)象的值,再輸入組件的值
// data from mixins
// data from template

六、mixins 中有異步請(qǐng)求的情況

當(dāng)混入里面包含異步請(qǐng)求函數(shù),而我們又需要在組件中使用異步請(qǐng)求函數(shù)的返回值時(shí),我們會(huì)取不到此返回值,解決方案是:不要返回結(jié)果,而是直接返回異步函數(shù)

// myMixins.js 中直接返回異步函數(shù)
export const myMixins = {
  components:{},
  data() {
    return {
      num: 1,
    }
  },
  methods: {
   async getDate1() {
      let result = await new Promise((resolve,reject) => {
          let a = 1;
          setTimeout(() => {
            resolve(1)
          },500)
       })
       return result
    },
  }
}
// 組件中獲取混入的異步函數(shù),通過(guò)then 方法獲取函數(shù)值。
import { myMixins } from "./myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  mounted() {
    this.getDate1().then(res => {
      console.log(res)
    })
  }
}

七、與 vuex 的區(qū)別

vuex:  用來(lái)做狀態(tài)管理,vuex中定義的變量在每個(gè)組件中均可以使用和修改,在任一組件中修改此變量的值之后,其他組件中此變量的值也會(huì)隨之修改。相當(dāng)于所有組件共享。

Mixins:  可以定義共用的變量,在每個(gè)組件中使用,引用組件中之后,各個(gè)變量是相互獨(dú)立的,值的修改在組件中不會(huì)相互影響。組件直接使用是相互隔離的,數(shù)據(jù)互不影響。

八、與公共組件的區(qū)別

組件: 在父組件中引入組件,相當(dāng)于在父組件中給出一片獨(dú)立的空間供子組件使用,然后根據(jù) prop 來(lái)傳值,但本質(zhì)上兩者是相對(duì)獨(dú)立的。

Mixins: 在引入組件之后與組件中的對(duì)象和方法進(jìn)行合并,相當(dāng)于擴(kuò)展了父組件的對(duì)象與方法,可以理解為形成了一個(gè)新的組件。

到此這篇關(guān)于Vue中mixins混入的介紹和使用詳解的文章就介紹到這了,更多相關(guān)Vue mixins混入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue?element-ui的table列表中展示多張圖片(可放大)效果實(shí)例

    vue?element-ui的table列表中展示多張圖片(可放大)效果實(shí)例

    這篇文章主要給大家介紹了關(guān)于vue?element-ui的table列表中展示多張圖片(可放大)效果的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 一文詳解WebStorm如何調(diào)試Vue項(xiàng)目

    一文詳解WebStorm如何調(diào)試Vue項(xiàng)目

    這篇文章主要介紹了如何使用WebStorm進(jìn)行斷點(diǎn)調(diào)試,包括配置、啟動(dòng)本地應(yīng)用程序、設(shè)置斷點(diǎn)以及使用調(diào)試工具等步驟,文中通過(guò)圖文及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Vue表單驗(yàn)證插件Vue Validator使用方法詳解

    Vue表單驗(yàn)證插件Vue Validator使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue表單驗(yàn)證插件Vue Validator使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue文件下載進(jìn)度條的實(shí)現(xiàn)過(guò)程

    Vue文件下載進(jìn)度條的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Vue文件下載進(jìn)度條的實(shí)現(xiàn)原理,通過(guò)使用onDownloadProgress方法API獲取進(jìn)度及文件大小等數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • vue中將網(wǎng)頁(yè)打印成pdf實(shí)例代碼

    vue中將網(wǎng)頁(yè)打印成pdf實(shí)例代碼

    本篇文章主要介紹了vue中將網(wǎng)頁(yè)打印成pdf實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • vue3使用el-table實(shí)現(xiàn)新舊數(shù)據(jù)對(duì)比的代碼詳解

    vue3使用el-table實(shí)現(xiàn)新舊數(shù)據(jù)對(duì)比的代碼詳解

    這篇文章主要為大家詳細(xì)介紹了在vue3中使用el-table實(shí)現(xiàn)新舊數(shù)據(jù)對(duì)比,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2023-12-12
  • 如何解決vue項(xiàng)目打包后文件過(guò)大問(wèn)題

    如何解決vue項(xiàng)目打包后文件過(guò)大問(wèn)題

    這篇文章主要介紹了如何解決vue項(xiàng)目打包后文件過(guò)大問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue-router懶加載速度緩慢問(wèn)題及解決方法

    vue-router懶加載速度緩慢問(wèn)題及解決方法

    這篇文章主要介紹了vue-router懶加載速度緩慢問(wèn)題及解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Vue+ElementUI?實(shí)現(xiàn)分頁(yè)功能-mysql數(shù)據(jù)

    Vue+ElementUI?實(shí)現(xiàn)分頁(yè)功能-mysql數(shù)據(jù)

    這篇文章主要介紹了Vue+ElementUI?實(shí)現(xiàn)分頁(yè)查詢-mysql數(shù)據(jù),當(dāng)數(shù)據(jù)庫(kù)中數(shù)據(jù)比較多時(shí),就每次只查詢一部分來(lái)緩解服務(wù)器和頁(yè)面壓力。這里使用elementui的?Pagination?分頁(yè)?組件,配合mysql的limit語(yǔ)句,實(shí)現(xiàn)分頁(yè)查詢mysql數(shù)據(jù),下面來(lái)看看具體實(shí)現(xiàn)過(guò)程,希望對(duì)大家學(xué)習(xí)有所幫助
    2021-12-12
  • vue監(jiān)聽瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作

    vue監(jiān)聽瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作

    這篇文章主要介紹了vue監(jiān)聽瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論