vue-treeselect 直接賦值后,后面跟(unknown)的解決辦法


項目中場景:

項目中有這樣的一個彈框,這里面的表單元素都是動態生成的,我自己封裝的有一個表單組件。

輸入框和普通的 select 下拉框用的都是 elementui 框架里面的東西,只有下拉樹結構用的是 vue-treeselect 插件。

新增頁面沒問題,下拉框的數據都是 select 獲取焦點的時候才請求接口,然后渲染數據。但是編輯頁面是從接口獲取業務數據(業務數據是指帶有值的表單元素)直接賦值的,elementui 的輸入框和 select 下拉框都沒問題,但是 vue-treeselect 直接賦值(中文值)后面就會跟  (unknown)

上網搜文章,很多文章說的都是頁面初始加載的時候,下拉框里面只有 (unknown) ,只要把雙向綁定數據改為 null 就可以了。與我碰到的問題不一樣,我這個是編輯頁面,直接賦值之后,后面跟 (unknown) 的情況。

參考  treeSelect賦值后,后面跟(unknown) 這篇文章之后,了解到 vue-treeselect 是必須有下拉框的數據,直接賦值的時候,必須賦值 ID ,然后插件通過 ID 去匹配下拉框里面的數據,顯示出 ID 所對應的中文內容。

但是我這里是沒有下拉框數據的,因為下拉框數據是 select 下拉框獲取焦點的時候,才去請求接口數據渲染下拉框的選項。而且我動態生成表單的時候,也沒辦法給下拉框的樹結構單獨請求接口,里面涉及到數組的循環,還有請求接口的異步賦值,導致最后賦值的下拉框數據都是最后一項(如果不清楚這一點,可以參考這篇文章:js之常見問題--for循環中為什么點擊總是彈出最后一個i)。

解決方案:

先上代碼截圖:

 

表單組件中,下拉樹結構的數據綁定的是 item.options ,所以編輯界面的時候,直接生成一個 options 選項,里面只有一項數據,就是要綁定的數據,然后賦值的時候,直接賦值 guid 即可。

注意,這里不能直接賦值 name 了,也就是不能直接賦值中文,不然還是會出現 (unknown) 的情況,必須賦值 guid ,插件自己會通過 guid 去下拉選項中尋找 guid 對應的中文 name

vue-treeselect 官網的下拉選項用的是 idlabel ,我這里根據項目需求用的是 guidname,因為我用 normalizer 轉化了一下,如下圖:

 

 

------------  完結  ------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM