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

如何隱藏element-ui中tree懶加載葉子節(jié)點checkbox(分頁懶加載效果)

 更新時間:2022年07月21日 10:38:56   作者:騎上我心愛的小摩托  
這篇文章主要介紹了如何隱藏element-ui中tree懶加載葉子節(jié)點checkbox(分頁懶加載效果),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

根據最新的工作需求中指示,要求Tree樹組件為lazy懶加載,且能夠進行復選框選擇,這個實現(xiàn)簡單,設置show-checkbox即可,若此處要求葉子節(jié)點也不能包含復選框,就有些困擾了

1.首先按照官網

拷貝tree樹組件代碼,設置完show-checkbox,圖中查看更多為葉子節(jié)點,且設置數(shù)據節(jié)點屬性為disabled

<el-tree
      ref="treeRef"
      class="treeDom"
      lazy
      show-checkbox
      :props="defaultProps"
      highlight-current="true"
      :load="lazyLoadMore"
      :expand-on-click-node="false"
      :default-expanded-keys="defaultExpandKeys"
      :default-checked-keys="defaultCheckedKeys"
      node-key="id"
      @node-expand="handleNodeExpand"
      @node-collapse="handleNodeCollapse"
      @node-click="handleNodeClick"
      @check="handleCheck"
    >
      <div slot-scope="{ node, data }" class="custom-tree-node">
        <!-- 查看更多 -->
        <span
          v-if="data.id ==='loadmore'"
          class="tree-node loadmore"
          @click="loadMoreNode(node,data)"
        >
          <el-link>{{ node.label }}</el-link>
        </span>
        <!-- 數(shù)據到底了 -->
        <span
          v-if="data.id ==='disabledload'"
          class="tree-node no-data"
          style="color: #999; cursor: auto;"
        >
          {{ node.label }}
        </span>
        <!-- 普通節(jié)點 -->
        <el-tooltip
          class="item"
          effect="light"
          placement="right-start"
        >
          <div slot="content" style="max-width: 300px;">
            {{ node.label }}
          </div>
          <span v-if="data.id !=='loadmore' && data.id!=='disabledload'" class="span-tree-node" @click="loadMoreNode(node,data)">{{ node.label }}</span>
        </el-tooltip>
      </div>
    </el-tree>

css樣式如下:

::v-deep .span-tree-node {
  width: 120px;
  position: absolute;
  text-overflow: ellipsis;
  overflow: hidden;
  color: #696969;
  top: 50%;
  transform: translateY(-50%);
}
::v-deep .treeDom {
  width: 100%;
  overflow-x: auto;
  .custom-tree-node {
    width: 100% !important;
    position: relative;
  }

2.由于屬性是isleaf

所以lazy狀態(tài)下葉子節(jié)點不會有加載目錄符號,但此時,有個禁用復選框,現(xiàn)在只需要對它設置樣式即可

::v-deep .el-tree .el-tree-node:last-child {
  .el-tree-node__content .is-leaf +.el-checkbox.is-disabled{
    display: none;
  }
  .el-tree-node__content.is-not-clickable{
    cursor: pointer;
  }
}

3. 分頁懶加載實現(xiàn)功能也比較簡單

可以復寫tree樹自帶的load方法,load方法內攜帶兩個返回參數(shù),一個是node,一個是resolve,即懶加載數(shù)據必須是通過resolve就是return 將數(shù)據帶回

    async lazyLoadMore(node, resolve, parentNode = []) {
      let id = node?.data?.id, pre = node?.data?.name, data = [], arrId = '';
      if (node.level === 0) {
        id = this.paramNode.parent;
        return resolve([{id: id, name: id, leaf: false}]);
      }
      if (node.level === 1) {
        pre = '';
      }
      // 節(jié)點各自的resolve
      this.funcResolve.push({id: id, resolve: resolve});
      this.funcResolve = this.funcResolve.filter((item, index, self)=>{
        return self.findIndex(x=>x.id === item.id) === index;
      });
      // 判斷獲取分頁查詢的pre參數(shù)
      if (id && id.indexOf('/') > -1) {
        let arrIndex = id.lastIndexOf('/') + 1;
        arrId = id.substring(arrIndex);
        if (arrId === pre) pre = '';
      }
      // lazy加載查詢接口
      const { data: {items} } = await getInterfaceTreeDictory({parent: id || '', pre: pre || ''});
      data = items.map(({interface_url: name, full_interface_url: id}) => {
        return {name, id};
      });
      // 翻頁信息添加
      if (data.length >= this.pageSize) {
        let nearName = data[data.length - 1].name;
        data.push({name: '查看更多', id: 'loadmore', nearName: nearName, leaf: true, disabled: true});
      }
      // 查看更多加載需根據各自的resolve加載數(shù)組數(shù)據
      if (parentNode && parentNode.length > 0) {
        parentNode.push(...data);
        return resolve(parentNode);
      } else {
        return resolve(data);
      }
    },
    // 查看更多事件點擊
    loadMoreNode(node, data) {
      if (data.id === 'loadmore') {
        let nodeParentKey = node.parent.key ? node.parent.key : this.paramNode.parent;
        let childNode = {
            data: {
              id: nodeParentKey,
              name: data.nearName
            }
          }, resolve = '';
        let parentNode = node.parent.childNodes.map(({key: id, label: name})=>{
          return { name, id };
        });
        console.log(parentNode);
        // 剔除自定義查看更多option數(shù)據
        if (parentNode.length > 0) {
          parentNode = parentNode.slice(0, -1);
        }
        // 選取resolve返回
        if (parentNode.length <= this.pageSize) {
          resolve = this.funcResolve.filter((item)=>{
            return item.id === nodeParentKey;
          });
          // 調用原生Tree load方法
          this.$refs.treeRef.load(childNode, resolve[0].resolve, parentNode);
        }
      }
    },

代碼內有一點需要注意,即每次查詢接口的時候,和后臺約定的規(guī)則是:不包含分頁,需要傳值兩個參數(shù),一個是parent,即當前節(jié)點的上一級所有層級拼接,另一個是pre即當前節(jié)點的子集,若第一次加載,pre可為空,若查看更多再一次加載pre為上一次加載數(shù)據data的最后一個元素id,作為傳參;

eg:

  • a、此時需要點擊加載js,即 GET請求下param參數(shù)如下parent=172.24.114.143:8080/js&pre=

  • b、此時繼續(xù)點擊查看更多,則傳入parent=172.24.114.143:8080/js&pre=jquery-showloading

到此代碼和效果都正常了~

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

相關文章

  • Vue axios全局攔截 get請求、post請求、配置請求的實例代碼

    Vue axios全局攔截 get請求、post請求、配置請求的實例代碼

    這篇文章主要介紹了Vue axios全局攔截 get請求、post請求、配置請求的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • vue按住shift鍵多選方式(以element框架的table為例)

    vue按住shift鍵多選方式(以element框架的table為例)

    這篇文章主要介紹了vue按住shift鍵多選方式(以element框架的table為例),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue中watch使用方法詳解

    Vue中watch使用方法詳解

    watch就是當值第一次綁定的時候,是不會執(zhí)行監(jiān)聽函數(shù)的,只有值誕生改變才會執(zhí)行。如果需要在第一次綁定的時候也執(zhí)行函數(shù),則需要用到immediate屬性,比如當父組件向子組件動態(tài)傳值時,子組件props首次獲取到父組件傳來的No認知時,也需要執(zhí)行函數(shù)
    2023-01-01
  • VUE中的export default和export使用方法解析

    VUE中的export default和export使用方法解析

    export default和export都能導出一個模塊里面的常量,函數(shù),文件,模塊等,在其它文件或模塊中通過import來導入常量,函數(shù),文件或模塊。但是,在一個文件或模塊中export,import可以有多個,export default卻只能有一個。
    2022-12-12
  • vue中data里面的數(shù)據相互使用方式

    vue中data里面的數(shù)據相互使用方式

    這篇文章主要介紹了vue中data里面的數(shù)據相互使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue-element-admin搭建后臺管理系統(tǒng)的實現(xiàn)步驟

    vue-element-admin搭建后臺管理系統(tǒng)的實現(xiàn)步驟

    本文主要介紹了vue-element-admin搭建后臺管理系統(tǒng)的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 簡單的vue-resourse獲取json并應用到模板示例

    簡單的vue-resourse獲取json并應用到模板示例

    本篇文章主要介紹了簡單的vue-resourse獲取json并應用到模板示例,非常具有實用價值,需要的朋友可以參考下。
    2017-02-02
  • Vue解決ajax跨域的問題

    Vue解決ajax跨域的問題

    這篇文章主要介紹了Vue解決ajax跨域的問題,跨域請求:是指協(xié)議名、主機名、端口號三者有任何一個不一樣,而且跨域請求是請求發(fā)出去了,服務器接收并返回了結果,只是瀏覽器沒有接收響應結果。感興趣的同學可以參考閱讀
    2023-04-04
  • vue2項目使用element-ui的el-tabs組件導致瀏覽器崩潰卡死問題

    vue2項目使用element-ui的el-tabs組件導致瀏覽器崩潰卡死問題

    這篇文章主要介紹了vue2項目使用element-ui的el-tabs組件導致瀏覽器崩潰卡死問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue項目的屏幕自適應多個方案總結

    vue項目的屏幕自適應多個方案總結

    最近在用VUE寫大屏頁面,遇到屏幕自適應問題,下面這篇文章主要給大家介紹了關于vue項目的屏幕自適應多個方案的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論

师宗县| 象州县| 鸡东县| 台安县| 滦平县| 崇州市| 枣庄市| 青河县| 安徽省| 繁昌县| 米易县| 金阳县| 察哈| 绥江县| 新营市| 新密市| 越西县| 康保县| 根河市| 时尚| 泰顺县| 西吉县| 元阳县| 武川县| 托克逊县| 泽库县| 中山市| 灵宝市| 尤溪县| 威宁| 二连浩特市| 营口市| 新津县| 深水埗区| 龙州县| 米脂县| 伊金霍洛旗| 嘉定区| 读书| 滨海县| 云龙县|