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

如何在vue單頁(yè)中重復(fù)引入同一子組件

 更新時(shí)間:2024年03月24日 16:47:40   作者:console.log( )  
這篇文章主要介紹了如何在vue單頁(yè)中重復(fù)引入同一子組件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue單頁(yè)中重復(fù)引入同一子組件

如果一個(gè)功能復(fù)用率比較高,我們一般寫成一個(gè)公共組件,需要的時(shí)候就引入

今天遇到一個(gè)問(wèn)題,寫了一個(gè)城市級(jí)聯(lián)選擇器的公共子組件,我在一個(gè)頁(yè)面引入了三個(gè)該組件,發(fā)現(xiàn)只有一個(gè)能夠使用,拿代碼說(shuō)事

下面代碼是我城市選擇器的一部分,我將getProvince方法在created中執(zhí)行,因此只要打開引入該組件的頁(yè)面,方法中的請(qǐng)求就會(huì)發(fā)送,結(jié)果是三個(gè)組件中的其中兩個(gè)console.log(res) 輸出為underfined,為了測(cè)試是否是res的是輸出結(jié)果,我在后面輸出1,發(fā)現(xiàn)確實(shí)是輸出了三次1,underfined就是res的輸出結(jié)果,頁(yè)面中只有一個(gè)級(jí)聯(lián)選擇器點(diǎn)擊有數(shù)據(jù)

getProvince(data) {
				cityFormApi.getDown(data).then(res => {
					console.log(res)
					console.log('1')
					let that = this;
					let province = res.data;
					for (let i = 0; i < province.length; i++) {
						let wzpz = province[i];
						wzpz.value = wzpz.id;
						wzpz.label = wzpz.name;
						wzpz.loading = false;
						wzpz.children = [];
						that.newSbType.push(wzpz);
					}
				})
			},

在頁(yè)面中引入組件

<queryData @ProvinceData="childByValue"></queryData>

子組件返回?cái)?shù)據(jù)

this.$emit('ProvinceData', this.newObject);

解決方法

不要在同一時(shí)間去調(diào)用,我選擇在點(diǎn)擊輸入框的時(shí)候再執(zhí)行請(qǐng)求,所以在任何一個(gè)子組件被使用時(shí)都會(huì)重新發(fā)送一次請(qǐng)求

在下拉框展開事件中,執(zhí)行g(shù)etProvince方法

vue多個(gè)相同組件重復(fù)請(qǐng)求的問(wèn)題

一個(gè)頁(yè)面中如果多次調(diào)用同一個(gè)組件的話,組件中請(qǐng)求多個(gè)接口,那么就會(huì)導(dǎo)致一上來(lái)就會(huì)一次性請(qǐng)求多個(gè)重復(fù)的接口。

解決方案

import { listDept } from "@/api/system/dept";
import { roleSelect } from "@/api/system/role";
import { formList as formSelect } from "@/api/statisticalConfig/formManage";
import { validatenull } from "@/utils/ruoyi";

let cache = {};
let count = 0;

/**
 * 睡眠一段時(shí)間
 * @param {Number} ms 延遲時(shí)間,單位毫秒
 * @returns {Promise<void>}
 */
async function delay(ms = 200) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

export async function getAllData(params) {
  try {
    let id = localStorage.getItem("oldBusinessTypeId");
    if (!validatenull(cache) && id == params.businessTypeId) {
      return cache;
    }

    if (count++) {
      // 如果有計(jì)數(shù)說(shuō)明自己不是第 1 個(gè),就等。注意這里判斷的是加之前的 count
      // 循環(huán)里最好再加個(gè)超時(shí)判斷
      while (!cache) {
        await delay();
      }
    } else {
      // 是第 1 個(gè)就去請(qǐng)求
      // 如果這里有可能會(huì)拋異常,拋異常也不要漏了 count--
      const res1 = await listDept(); //部門列表
      const res2 = await roleSelect(); //角色列表
      const res3 = await formSelect(params); //表單數(shù)據(jù)

      cache = {
        deptList: res1.data,
        roleList: res2.data,
        formList: res3.data,
      };
      if (!validatenull(cache.formList)) {
        let oldBusinessTypeId = cache.formList[0].businessTypeId;
        localStorage.setItem("oldBusinessTypeId", oldBusinessTypeId);
      }
    }
    count--; // 記得減回去,方便以后如果要刷新 cache 的時(shí)候用
    return cache;
  } catch (error) {
    console.log("獲取數(shù)據(jù)出錯(cuò)", error);
  }
}

總結(jié)

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

相關(guān)文章

  • vue中的v-show,v-if,v-bind的使用示例詳解

    vue中的v-show,v-if,v-bind的使用示例詳解

    這篇文章主要介紹了vue中的v-show,v-if,v-bind的使用,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Vue中computed和watch的區(qū)別小結(jié)

    Vue中computed和watch的區(qū)別小結(jié)

    watch和computed都是以Vue的依賴追蹤機(jī)制為基礎(chǔ)的,當(dāng)某一個(gè)依賴型數(shù)據(jù)發(fā)生變化的時(shí)候,所有依賴這個(gè)數(shù)據(jù)的相關(guān)數(shù)據(jù)會(huì)自動(dòng)發(fā)生變化,即自動(dòng)調(diào)用相關(guān)的函數(shù),來(lái)實(shí)現(xiàn)數(shù)據(jù)的變動(dòng),這篇文章簡(jiǎn)單介紹下Vue中computed和watch的區(qū)別異同,感興趣的朋友一起看看吧
    2022-12-12
  • Vue3 Props沒(méi)有默認(rèn)值但報(bào)錯(cuò)的解決方案

    Vue3 Props沒(méi)有默認(rèn)值但報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了Vue3 Props沒(méi)有默認(rèn)值但報(bào)錯(cuò)的解決方案,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • vue-cli3+ts+webpack實(shí)現(xiàn)多入口多出口功能

    vue-cli3+ts+webpack實(shí)現(xiàn)多入口多出口功能

    這篇文章主要介紹了vue-cli3+ts+webpack實(shí)現(xiàn)多入口多出口功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue打包并部署到nginx上的實(shí)現(xiàn)示例

    vue打包并部署到nginx上的實(shí)現(xiàn)示例

    本文主要介紹了vue打包并部署到nginx上的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • vue-resource 攔截器使用詳解

    vue-resource 攔截器使用詳解

    本篇文章主要介紹了vue-resource 攔截器使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Pinia中action使用方法詳解

    Pinia中action使用方法詳解

    Pinia是Vue的存儲(chǔ)庫(kù),它允許您跨組件/頁(yè)面共享狀態(tài),下面這篇文章主要給大家介紹了Pinia中action使用方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • vue異步加載高德地圖的實(shí)現(xiàn)

    vue異步加載高德地圖的實(shí)現(xiàn)

    這篇文章主要介紹了vue異步加載高德地圖的實(shí)現(xiàn),詳細(xì)的介紹了異步加載的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • element ui表格實(shí)現(xiàn)下拉篩選功能

    element ui表格實(shí)現(xiàn)下拉篩選功能

    這篇文章主要為大家詳細(xì)介紹了element ui表格實(shí)現(xiàn)下拉篩選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Element?UI表單驗(yàn)證規(guī)則動(dòng)態(tài)失效問(wèn)題的解決辦法

    Element?UI表單驗(yàn)證規(guī)則動(dòng)態(tài)失效問(wèn)題的解決辦法

    這篇文章主要給大家介紹了關(guān)于Element?UI表單驗(yàn)證規(guī)則動(dòng)態(tài)失效問(wèn)題的解決辦法,Element UI提供了強(qiáng)大的表單驗(yàn)證功能,可以輕松地對(duì)表單進(jìn)行驗(yàn)證,需要的朋友可以參考下
    2023-09-09

最新評(píng)論