1. 程式人生 > >Tree 樹形控制元件的顯示和更改

Tree 樹形控制元件的顯示和更改

如圖這種樹形控制元件的顯示和內容修改的實現問題,我做的需求最多層級是三級內容。

首先在請求成功的函式中去遍歷請求回來的資料如下:

let obj = {};
let myList = [];
for (let item of this.roleRightList) {
              // debugger
              if(item.children){
                for (let item1 of item.children) {
                  if(item1.checked){
                    if(item1.children){
                      for (let item2 of item1.children) {
                        if (item2.checked) {
                          if(item2.children){
                            for (let item3 of item2.children) {
                              if (item3.checked) {
                                obj.id = item3.id;
                                obj.label = item3.name;
                                myList.push(JSON.parse(JSON.stringify(obj)));
                                this.$nextTick(() => {
                                  this.$refs.tree.setCheckedNodes(myList);
                                });
                              }
                            }
                          }else {
                            obj.id = item2.id;
                            obj.label = item2.name;
                            myList.push(JSON.parse(JSON.stringify(obj)));
                            this.$nextTick(() => {
                              this.$refs.tree.setCheckedNodes(myList);
                            });
                          }
                        }else {
                          if(item2.children){
                            for (let item3 of item2.children) {
                              if (item3.checked) {
                                obj.id = item3.id;
                                obj.label = item3.name;
                                myList.push(JSON.parse(JSON.stringify(obj)));
                                this.$nextTick(() => {
                                  this.$refs.tree.setCheckedNodes(myList);
                                });
                              }
                            }
                          }
                        }
                      }
                    }else {
                      obj.id = item1.id;
                      obj.label = item1.name;
                      myList.push(JSON.parse(JSON.stringify(obj)));
                      this.$nextTick(() => {
                        this.$refs.tree.setCheckedNodes(myList);
                      });
                    }
                  } else {
                    if(item1.children){
                      for (let item2 of item1.children) {
                        if(item2.checked){
                          obj.id = item2.id;
                          obj.label = item2.name;
                          myList.push(JSON.parse(JSON.stringify(obj)));
                          this.$nextTick(() => {
                            this.$refs.tree.setCheckedNodes(myList);
                          });
                        }
                      }
                    }
                  }
                }
              }
            }

在標籤上面這樣寫:

        <el-tree
          :data="roleRightList"
          show-checkbox
          default-expand-all
          node-key="id"
          ref="tree"
          highlight-current
          @check="handleCheckChange"
          :props="defaultProps">
        </el-tree>

這樣就把從後臺請求回來的checked為true的顯示出來了。

下面開始實現修改之後將修改的資料傳給後臺,如果只修改一條資料就將這條資料的id和checked傳給後臺,如果修改了父級就把父級以及子級對應的id和checked放在一個list中傳給後臺:

handleCheckChange(data, checked, indeterminate) {
      // debugger
      let obj = {};
      let obj2 = {};
      if (data.children) {
        // debugger
        if(data.checked){
          obj2.checked = false;
        } else {
          obj2.checked = true;
        }
        obj2.id = data.id;
        this.params.push(JSON.parse(JSON.stringify(obj2)));

        for (let i in data.children) {
          if(data.checked){
            obj2.checked = false;
          } else {
            obj2.checked = true;
          }
          obj2.id = data.children[i].id;
          this.params.push(JSON.parse(JSON.stringify(obj2)));

          if(data.children[i].children){
            // if(data.children[i].checked){
            if(data.checked){
              obj2.checked = false;
            } else {
              obj2.checked = true;
            }
            obj2.id = data.children[i].id;
            this.params.push(JSON.parse(JSON.stringify(obj2)));
            for (let j in data.children[i].children) {
              // if(data.children[i].checked){
              if(data.checked){
                obj2.checked = false;
              } else {
                obj2.checked = true;
              }
              obj2.id = data.children[i].children[j].id;
              this.params.push(JSON.parse(JSON.stringify(obj2)));
              if(data.children[i].children[j].children){
                // if(data.children[i].children[j].checked){
                if(data.checked){
                  obj2.checked = false;
                } else {
                  obj2.checked = true;
                }
                obj2.id = data.children[i].children[j].children.id;
                this.params.push(JSON.parse(JSON.stringify(obj2)));
                for(let p in data.children[i].children[j].children){
                  // if(data.children[i].children[j].checked){
                  if(data.checked){
                    obj2.checked = false;
                  } else {
                    obj2.checked = true;
                  }
                  obj2.id = data.children[i].children[j].children[p].id;
                  this.params.push(JSON.parse(JSON.stringify(obj2)));
                  if(data.children[i].children[j].children[p].children){
                    // if(data.children[i].children[j].children[p].checked){
                    if(data.checked){
                      obj2.checked = false;
                    } else {
                      obj2.checked = true;
                    }
                    obj2.id = data.children[i].children[j].children[p].id;
                    this.params.push(JSON.parse(JSON.stringify(obj2)));
                    for(let b in data.children[i].children[j].children[p].children){
                      // if(data.children[i].children[j].children[p].checked){
                      if(data.checked){
                        obj2.checked = false;
                      } else {
                        obj2.checked = true;
                      }
                      obj2.id = data.children[i].children[j].children[p].children[b].id;
                      this.params.push(JSON.parse(JSON.stringify(obj2)));
                    }
                  }
                }
              }
            }
          }
        }
      }else {
        if (data.checked) {
          obj.checked = false;
        } else {
          obj.checked = true;
        }
        obj.id = data.id;
        this.params.push(JSON.parse(JSON.stringify(obj)));
      }
    },

第一次做樹形需求,程式碼可能還需進一步完善。

相關推薦

Tree 樹形控制元件顯示更改

如圖這種樹形控制元件的顯示和內容修改的實現問題,我做的需求最多層級是三級內容。 首先在請求成功的函式中去遍歷請求回來的資料如下: let obj = {}; let myList = []; for (let item of this.roleRightList) {

遞迴組裝Cascader 級聯選擇器Tree 樹形控制元件結構的資料

以商品分類表為例,重點看分類ID和父分類ID public List<Map<String,Object>> getGoodsCategoryTree() { //1.獲取所有商品分類,條件:category_id!=0(0為頂級選單的父類I

ajax獲取巢狀JSON,樹形控制元件顯示

Ztree的api連結: http://www.treejs.cn/v3/demo.php#_113 上面有許許多多的例子,但是都是自己手寫的資料。在現實生活中,很多時候資料都是通過後臺獲取的,當獲取的是資料是單層的json,鍵名和例子一樣的時候可以直接使用,而且比較簡單。但是,很多時候是巢

C#中使用DateTimePicker控制元件顯示修改日期時間

    在Winform程式有一個DateTimePicker控制元件,這個控制元件是用來顯示和修改日期時間的,但預設只顯示日期和修改日期。若要顯示和修改時間,則要自定義設定,方法如下:     在Winform程式新增一個DateTimePicker控制元件,命名為dtpT

Android控制元件顯示隱藏

Android控制元件都有visibility屬性,該屬性有三個值:visible、invisible、gone。可以通過預設或者是Java程式碼來控制這些控制元件的顯示或者是隱藏。 一、在XML配

vue elementUI tree樹形控制元件如何獲取父節點ID

首先找到element-ui.common.js檔案 如下 具體看你工程下的node_modulesD:\workSpace\vue_manage\node_modules\element-ui\lib\element-ui.common.js找到getCheckedNode

基於vue.js 2.0,不使用webpack的nodejs服務,只在瀏覽器上單獨使用在Element UI的Tree樹形控制元件

Vue.js(讀音 /vjuː/,類似於 view) 是一套構建使用者介面的漸進式框架。與其他重量級框架不同的是,Vue 採用自底向上增量開發的設計。Vue 的核心庫只關注檢視層,它不僅易於上手,還便於與第三方庫或既有專案整合。另一方面,當與單檔案元件和 Vue

tree樹形控制元件之迴圈遍歷

最近在寫程式時需要對樹形控制元件進行查詢指定文字的內容,因此寫了本函式。 //item:待遍歷樹的根節點,strtext:待查詢節點名稱HTREEITEM  Ctest2Dlg::FindItem(CTreeCtrl &ctrlTree ,HTREEITEM  it

Winform下使用ListView控制元件ImageList控制元件顯示圖片縮圖

一、基本概念 1、ImageList控制元件 ImageList元件,又稱為圖片儲存元件,它主要用於儲存圖片資源,然後在控制元件上顯示出來,這樣就簡化了對圖片的管理。ImageList元件的主要屬性是Images,它包含關聯控制元件將要使用的圖片。每個單獨的圖片可以通過其索引值或鍵值來訪問。

unity3d嵌入到iOS工程(3d物體iOS控制元件顯示在同一個view上)

最近公司要開發一款用於3d展示的應用,通過在網上拜讀各大神的帖子,終於完美解決此類問題。(unity3d版本2017.3,xcode9.2) 前邊unity3d打包iOS工程的方法在此就不做贅述,其他帖子基本可以解決,本帖直接上乾貨。 1、在打包好的iOS工程中,找到UnityAppCont

elementui 後臺管理系統遇到的問題(二) 樹形控制元件 el-tree

elementui中樹形控制元件的使用 一、將後臺返回的資料填充到前端控制元件中,需要注意的幾點問題 (1)、el-tree中需要繫結node-key='自定義的id名稱' (2)、在配置data中defaultProps中的屬性時,要按照與後端協商的欄位名稱對稱 (3)、重要的是要月後端協商返回欄位內容

Unity樹形控制元件Tree View)的使用

1.下載外掛Tree View匯入到工程中。下載地址:https://assetstore.unity.com/packages/tools/gui/tree-view-65364。 2.新建場景,新建Canvas,將Assets\Battlehub\UIControls

ASP.NET中利用DataGrid控制元件顯示圖片以及在圖片文字上加超連結

資料表:     介面程式碼:                  <asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="False" BorderWidth="0px"  PageSiz

調整MFC 控制元件顯示層次調整,即(疊放次序)繪製遮擋問題

控制元件有的放在上面有的放在下面,但是不小心次序弄錯了,那麼怎麼糾正呢? VC檢視視窗的控制元件,按下ctrl +D 可以看到他們的顯示層次,數字小的最底層,要調整其中的順序,就是在按下CTRL+D看到各個控制元件的次序後,用滑鼠挨個點選一下就重新排序了,先點選的是1,再點

OpenCV學習筆記(9)利用MFC的Picture控制元件顯示影象+播放視訊捕獲攝像頭畫面

P.S.:後面又添加了播放視訊和捕獲攝像頭畫面的功能,其中播放視訊的功能只有 'Play' 和 'Stop',不能實現暫停,《A step-by-step guide to the use of Microsoft Visual C++ and the Intel Ope

MFC 控制元件顯示層次調整(疊放次序)繪製控制問題

使用MFC的設計器,想調整控制元件的疊放次序,怎麼也找不到在哪,網上搜了一大圈,原來... 在視窗介面按Ctrl+D,每個控制元件會顯示一個編號,這個編號決定繪製的順序,即疊放的次序,號小的會先被繪製,即繪製在下方。 另外如果發現疊放在一起的控制元件有時會得不到及時的重新整

帶有『選擇次數排序』『搜尋』功能的樹形控制元件設計與實現

一、思想創意 樹形控制元件是軟體操作介面中最常見的一種資料展現控制元件,如下圖所示: 圖1 這就是我們常見的樹形結構,目前有很多樹控制元件可以供我們選擇使用,如zTree、Ext中的樹控制元件,等等。 樹形控制元件這麼多,但實現的功能就是上面這張圖,樹

winform,DataGridView繫結資料後更改列屬性、動態建立(用一個控制元件顯示多表適用)

DataGridView 特效 = new DataGridView(); string[] 列名 = { "直線", "炸彈", "骷髏", "禮盒" },

安卓(Android )軟鍵盤的控制顯示隱藏)

false def gets nbsp bool code 表示 soft 系統 Activity 啟動時軟鍵盤默認狀態 在清單文件(manifest .xml)中可以通過在 Activity 標簽中增加屬性控制軟鍵盤的默認狀態: android:windowSoftIn

Android中使用ImageView控制元件顯示網路圖片

在android4.0以後的版本中,為了使得主介面流暢,所以設定了不允許在主執行緒中訪問網路,為了安全,又不允許在其它執行緒中訪問控制元件,這樣就造成了ImageView等需要使用網路的控制元件更新時的問題,本文以Handler+Runnable的方式實現了ImageView控制元件顯示網路圖片.