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

Vue3中無法為el-tree-select設(shè)置反選問題解析

 更新時間:2023年04月11日 08:22:53   作者:默卿  
這篇文章主要介紹了Vue3中無法為el-tree-select設(shè)置反選問題分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

好久沒有寫博客了,剛好上周遇到一個難纏問題,這里記錄一下。

  環(huán)境:Vue3.2、Element Plus

  問題:子組件 setting.vue => 彈窗組件 Dialog => 樹選擇組件el-tree-select ,無法設(shè)置默認(rèn)選中項(xiàng) default-checked-keys

  場景:在一個后臺系統(tǒng)的列表頁,選中一行數(shù)據(jù),點(diǎn)擊設(shè)置按鈕,分配一些功能。這里的做法是把設(shè)置頁封裝在一個子組件里了,并且子組件里使用了Element Plus的Dialog組件

               然后Dialog里有個el-tree-select需要初始化賦值,因?yàn)樵诜峙渲?,可能之前分配過,需要設(shè)置反選

  最開始是直接寫死,如下:

<template>
  <el-tree-select

    :data="store().UserMenus"

:default-expanded-keys="['xxxxxxxx']" 
  />
</template>

  然后發(fā)現(xiàn)不生效,周五的時候也能猜到原因,data綁定的pinia全局狀態(tài)里的值,組件被實(shí)例化時這個值可能還未被加載,所以設(shè)置default-expanded-keys時它就找不到節(jié)點(diǎn)數(shù)據(jù),等組件被創(chuàng)建后,data有值了,但是default-expanded-keys又不會再重新設(shè)置了,就造成組件有下拉數(shù)據(jù),但是沒有反選效果。

  起初以為是個簡單問題,于是動了動腦子,既然和順序有關(guān),那自然考慮到生命周期了,于是在setting.vue里加上onMounted,并在這里重新賦值:

// script ts
const list = ref()
const selectArr = ref<string[]>([])
onMounted(() => {
  list.value = store().UserMenus
  selectArr.value = ['xxxxxxxx']
})
 
// setting.vue
<template>
  <el-tree-select 
    :data="list"
    :default-expanded-keys="selectArr" 
  />
</template>

  data綁定list這個變量,default-expanded-keys綁定selectArr。嗯,以為可以了,結(jié)果還是沒有反選成功。就.....離譜~

  正常來講onMounted函數(shù)已經(jīng)是組件創(chuàng)建完畢并創(chuàng)建Dom了,這個時候我應(yīng)該可以設(shè)置list的值,再設(shè)置selectArr。但實(shí)際依然沒有反選成功。

  這說明加載依然存在問題,抱著研究的心態(tài),于是我又想起一種方法,我可以通過調(diào)用el-tree-select的API來通過方法設(shè)置它的默認(rèn)值,也就是setCheckedKeys方法!

  通過模板引用,獲取到el-tree-select,命名為tree,然后回到onMounted里打印:console.log(tree.value),好家伙,居然是個undefined,這說明在settting.vue的onMounted根本就無法設(shè)置選中的keys。然后詭異的是,在我反復(fù)修改代碼的時候,由于熱重載,Vue頁面會隨之更新,居然能反選上了!但是我一刷新,反選立刻失效。enmmmm ..... 基本能定位到問題的所在了,onMounted是無法獲取到組件的,后面試了一下onUnmounted,這個可以,但是我這是初始化邏輯,不可能寫在onUnmounted里。

  這里面還存在一個因素導(dǎo)致該問題的產(chǎn)生,就是Dialog默認(rèn)是不顯示的,通過v-model="dialogVisible"綁定的變量控制顯示隱藏,初始化值為false也是導(dǎo)致失效的一個原因,如我初始時設(shè)置dialogVisible.value = true ,那么反選是OK的,只不過我依然不可能設(shè)置為true,哪有彈窗一開始就顯示的。

  周五下午基本卡在這個地方了,經(jīng)過周末的放空自我(峽谷Timi),周一早上上班的路上復(fù)盤了一下,考慮從Dialog本身尋找答案,嘿,果不其然,它的API里有個opened方法,Dialog 打開動畫結(jié)束時的回調(diào),我在這里做初始化,問題就解決了:

// Dialog
@opened="opened"

// script ts 
const opened = () => {
     selectArr.value = ['xxxxxxxx']
}

  之所以能找到這個思路,還有一個原因是也試了一下表單,之前表單的提交事件里一直可以獲取到表單對象,然后試了一下onMounted里能不能獲取到,結(jié)果也是類似的情況。放個按鈕,在按鈕的點(diǎn)擊事件里是可以獲取到組件的,因?yàn)榈饶憧梢渣c(diǎn)擊按鈕時,頁面什么東西都加載完畢了,同樣的,Dialog 打開動畫結(jié)束時的回調(diào)里,頁面肯定早加載完畢了,該有的值都有了,那么這個時候做初始化就不會存在找不到key的問題了。

// Dialog
@opened="opened"

// script ts 
const opened = () => {
     selectArr.value = ['xxxxxxxx']
}

  這個問題看似簡單,最后opened方法搞定了,但實(shí)際很考驗(yàn)Vue的功底,什么時候組件被創(chuàng)建,什么時候數(shù)據(jù)被加載,每個屬性之間數(shù)據(jù)的聯(lián)動以及先后順序,如果你寫個固定值放在data和keys那里,肯定沒這個問題,Element Plus官方文檔大把的案例拿過來直接就有效果,但是呢,實(shí)際的項(xiàng)目開發(fā)中,經(jīng)常是多個技術(shù)點(diǎn)綜合在一起,你基本不可能把一個下拉框的值寫死了,也許你和我一樣從pinia里取的值,也許你通過axios讀的數(shù)據(jù),也許是別的路子,但是多少會遇到一些和預(yù)期不符的時候,因此這里以這個案例分享一下,自己也做個記錄,如果有人遇到了類似的問題可以參考一二,有更好的方案也可以提出來一起交流交流。

到此這篇關(guān)于Vue3中無法為el-tree-select設(shè)置反選問題分析的文章就介紹到這了,更多相關(guān)Vue3 無法為el-tree-select內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用typescript構(gòu)建Vue應(yīng)用的實(shí)現(xiàn)

    使用typescript構(gòu)建Vue應(yīng)用的實(shí)現(xiàn)

    這篇文章主要介紹了使用typescript構(gòu)建Vue應(yīng)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • babel7.x和webpack4.x配置vue項(xiàng)目的方法步驟

    babel7.x和webpack4.x配置vue項(xiàng)目的方法步驟

    這篇文章主要介紹了babel7.x和webpack4.x配置vue項(xiàng)目的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Vue報錯Module build failed: Error: Node Sass version 7.0.1 is incompatible with 4.0.0.解決方案

    Vue報錯Module build failed: Error: Node&nb

    這篇文章主要介紹了Vue報錯Module build failed: Error: Node Sass version 7.0.1 is incompatible with 4.0.0.解決方案,需要的朋友可以參考下
    2023-06-06
  • vant picker+popup 自定義三級聯(lián)動案例

    vant picker+popup 自定義三級聯(lián)動案例

    這篇文章主要介紹了vant picker+popup 自定義三級聯(lián)動案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue 子組件修改data或調(diào)用操作

    vue 子組件修改data或調(diào)用操作

    這篇文章主要介紹了vue 子組件修改data或調(diào)用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 解決Vue+SpringBoot+Shiro跨域問題

    解決Vue+SpringBoot+Shiro跨域問題

    本文將結(jié)合實(shí)例代碼,解決Vue+SpringBoot+Shiro跨域問題,相信大家剛開始做都會遇到這個問題,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • vue獲取當(dāng)前日期時間(使用moment和new?Date())

    vue獲取當(dāng)前日期時間(使用moment和new?Date())

    在項(xiàng)目開發(fā)中我遇到了日期范圍選擇器,兩種獲取當(dāng)前日期并做處理的寫法,這里記錄一下,下面這篇文章主要給大家介紹了關(guān)于vue獲取當(dāng)前日期時間(使用moment和new?Date())的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Vue+Echarts實(shí)現(xiàn)簡單折線圖

    Vue+Echarts實(shí)現(xiàn)簡單折線圖

    這篇文章主要為大家詳細(xì)介紹了Vue+Echarts實(shí)現(xiàn)簡單折線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue實(shí)現(xiàn)在data里引入相對路徑

    vue實(shí)現(xiàn)在data里引入相對路徑

    這篇文章主要介紹了vue實(shí)現(xiàn)在data里引入相對路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue中jsonp的使用方法

    vue中jsonp的使用方法

    這篇文章主要介紹了vue中jsonp的使用方法,文章從安裝開始展開具體的vue中jsonp的使用詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對大家有所幫助
    2021-11-11

最新評論

宣恩县| 元江| 株洲县| 惠安县| 商都县| 马鞍山市| 赫章县| 宝兴县| 蓝田县| 贵阳市| 肇庆市| 政和县| 厦门市| 耿马| 岗巴县| 易门县| 隆回县| 芮城县| 洪江市| 东乡县| 清原| 历史| 安阳县| 达孜县| 二手房| 乡宁县| 龙海市| 浙江省| 项城市| 通海县| 彭州市| 兴安县| 峨边| 静宁县| 黄骅市| 北川| 贡嘎县| 青冈县| 元朗区| 普洱| 安福县|