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

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

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

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

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

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

下面代碼是我城市選擇器的一部分,我將getProvince方法在created中執(zhí)行,因此只要打開引入該組件的頁面,方法中的請求就會發(fā)送,結(jié)果是三個組件中的其中兩個console.log(res) 輸出為underfined,為了測試是否是res的是輸出結(jié)果,我在后面輸出1,發(fā)現(xiàn)確實是輸出了三次1,underfined就是res的輸出結(jié)果,頁面中只有一個級聯(liá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);
					}
				})
			},

在頁面中引入組件

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

子組件返回數(shù)據(jù)

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

解決方法

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

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

vue多個相同組件重復(fù)請求的問題

一個頁面中如果多次調(diào)用同一個組件的話,組件中請求多個接口,那么就會導(dǎo)致一上來就會一次性請求多個重復(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;

/**
 * 睡眠一段時間
 * @param {Number} ms 延遲時間,單位毫秒
 * @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++) {
      // 如果有計數(shù)說明自己不是第 1 個,就等。注意這里判斷的是加之前的 count
      // 循環(huán)里最好再加個超時判斷
      while (!cache) {
        await delay();
      }
    } else {
      // 是第 1 個就去請求
      // 如果這里有可能會拋異常,拋異常也不要漏了 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 的時候用
    return cache;
  } catch (error) {
    console.log("獲取數(shù)據(jù)出錯", error);
  }
}

總結(jié)

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

相關(guān)文章

  • 詳解Element 指令clickoutside源碼分析

    詳解Element 指令clickoutside源碼分析

    這篇文章主要介紹了詳解Element 指令clickoutside源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Vue項目中0.js過大導(dǎo)致首屏加載慢的問題解決方法

    Vue項目中0.js過大導(dǎo)致首屏加載慢的問題解決方法

    在 Vue 項目開發(fā)完成后,進行打包部署時,首屏加載速度是影響用戶體驗的關(guān)鍵因素之一,最近我在項目中就遇到了 0.js 過大導(dǎo)致首屏加載時間變慢的問題,經(jīng)過一番排查和優(yōu)化,成功解決了該問題,特此記錄分享給大家,需要的朋友可以參考下
    2025-11-11
  • Vue3.2中setup語法糖的使用教程分享

    Vue3.2中setup語法糖的使用教程分享

    這篇文章主要為大家詳細介紹了Vue3.2中setup語法糖的具體使用方法,文中的示例代碼講解詳細,對我們深入了解Vue有一定的幫助,需要的可以參考一下
    2023-05-05
  • 詳解Vue項目中出現(xiàn)Loading chunk {n} failed問題的解決方法

    詳解Vue項目中出現(xiàn)Loading chunk {n} failed問題的解決方法

    這篇文章主要介紹了詳解Vue項目中出現(xiàn)Loading chunk {n} failed問題的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 基于Vue3編寫一個簡單的播放器

    基于Vue3編寫一個簡單的播放器

    這篇文章主要為大家詳細介紹了如何基于Vue3編寫一個簡單的播放器,文中的示例代碼講解詳細,對我們學(xué)習(xí)Vue3有一定的幫助,需要的可以參考一下
    2023-03-03
  • vue遞歸組件實現(xiàn)elementUI多級菜單

    vue遞歸組件實現(xiàn)elementUI多級菜單

    這篇文章主要為大家詳細介紹了vue遞歸組件實現(xiàn)elementUI多級菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue如何使用Promise.all()方法并行執(zhí)行多個請求

    Vue如何使用Promise.all()方法并行執(zhí)行多個請求

    在Vue中,可以使用Promise.all()方法并行執(zhí)行多個異步請求,當所有請求都成功返回時,Promise.all()將返回一個包含所有請求結(jié)果的數(shù)組,如果其中任何一個請求失敗,則會觸發(fā)catch()方法并返回錯誤信息,這種方式可以顯著提高程序的性能和響應(yīng)速度
    2025-01-01
  • vue使用swiper的時候第二輪事件不會觸發(fā)問題

    vue使用swiper的時候第二輪事件不會觸發(fā)問題

    這篇文章主要介紹了vue使用swiper的時候第二輪事件不會觸發(fā)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Ant Design的可編輯Tree的實現(xiàn)操作

    Ant Design的可編輯Tree的實現(xiàn)操作

    這篇文章主要介紹了Ant Design的可編輯Tree的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue2和Vue3中如何使用WebSocker封裝詳解

    Vue2和Vue3中如何使用WebSocker封裝詳解

    如果項目中多個組件都使用到WebSocket請求,那么我們需要對WebSocket進行封裝,方便我們使用,下面這篇文章主要給大家介紹了關(guān)于Vue2和Vue3中如何使用WebSocker封裝的相關(guān)資料,需要的朋友可以參考下
    2024-07-07

最新評論

龙门县| 青田县| 上饶市| 廊坊市| 富顺县| 中宁县| 曲沃县| 高雄市| 杭锦后旗| 昭觉县| 孙吴县| 邵武市| 屏南县| 佛冈县| 滨州市| 潼关县| 石河子市| 湟源县| 邢台市| 长治县| 永清县| 安顺市| 南部县| 南昌县| 广西| 绥芬河市| 额济纳旗| 曲松县| 西昌市| 隆昌县| 齐齐哈尔市| 罗山县| 文水县| 澄迈县| 兴山县| 额济纳旗| 麦盖提县| 芜湖市| 宜黄县| 乌苏市| 邳州市|