广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue ElementUI实现异步加载树
  • 560
分享到

vue ElementUI实现异步加载树

2024-04-02 19:04:59 560人浏览 安东尼
摘要

本文实例为大家分享了Vue ElementUI实现异步加载树的具体代码,供大家参考,具体内容如下 路由文件修改 import List from '@/components/li

本文实例为大家分享了Vue ElementUI实现异步加载树的具体代码,供大家参考,具体内容如下

路由文件修改


import List from '@/components/list.vue'
import Add from '@/components/add.vue'
import Tree from '@/components/tree.vue'
import AsynTree from '@/components/asyntree.vue'

export default{
    routes:[
        {path:"/list",component:List},
        {path:"/add",component:Add},
        {path:"/add/:id",component:Add},
        {path:"/tree",component:Tree},
        {path:"/asyntree",component:AsynTree}
    ]

}

首页app.vue


<template>
  <div id="app">
    <router-link to="/add">添加</router-link>&nbsp;&nbsp;
    <router-link to="/list">列表</router-link>&nbsp;&nbsp;
    <router-link to="/tree">树结构</router-link>&nbsp;&nbsp;
    <router-link to="/asyntree">异步树结构</router-link>&nbsp;&nbsp;
    <router-view></router-view>
  </div>
</template>

<script>
import List from './components/list.vue'

export default {
  name: 'app',
  components: {
    List
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -WEBkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

异步加载树页面


<template>


<el-container>
  <el-aside width="200px">
    <el-tree ref="tree"
    :data="data"
    lazy
    show-checkbox
    node-key="id"
    check-strictly
    :load="loadnode"
    :props="defaultProps"
    @node-click="nodeclick">
    </el-tree>
  </el-aside>
  <el-main>

    <el-fORM :model="typeinfo" class="demo-form-inline">
    <el-form-item label="ID">
        <el-input v-model="typeinfo.id" readonly></el-input>
    </el-form-item>
    <el-form-item label="分类名称">
        <el-input v-model="typeinfo.label" placeholder="分类名称"></el-input>
    </el-form-item>
    <el-form-item label="序号">
        <el-input v-model="typeinfo.seqno" placeholder="序号"></el-input>
    </el-form-item>
   <el-form-item label="父ID">
        <el-input v-model="typeinfo.pid" readonly></el-input>
    </el-form-item>
    <el-form-item>
        <el-button type="primary" @click="dosave">保存</el-button>
        <el-button type="primary" @click="dochildsave">添加节点</el-button>
    </el-form-item>
    </el-form>

  </el-main>
</el-container>

</template>

<script>
import axiOS from 'axios'

export default {
    data() {
        return {
            data:[],//树对象数据模型
            defaultProps: {//树对象属性对应关系
                children: 'children',
                label: 'label'
            },
            typeinfo: {//商品分类实体对象
                id:'',
                pid:'',
                label: '',
                seqno: ''
            }
        }
    },
    methods: {
        loadnode(node,resolve){
            //如果展开第一级节点,从后台加载一级节点列表
            if(node.level==0)
            {
                this.loadfirstnode(resolve);
            }
            //如果展开其他级节点,动态从后台加载下一级节点列表
            if(node.level>=1)
            {
                this.loadchildnode(node,resolve);
            }
        },
        //加载第一级节点
        loadfirstnode(resolve){
            axios.get('Http://localhost:6060/loadtype')
                .then(function(resp){
                    resolve(resp.data);
                })
        },
        //刷新树组件
        refreshtree(){
            var _this = this;
            axios.get('http://localhost:6060/loadtype')
                .then(function(resp){
                    _this.data = resp.data;
                })
        },
        //加载节点的子节点集合
        loadchildnode(node,resolve){
            axios.get('http://localhost:6060/loadtypechild?pid='+node.data.id)
                .then(function(resp){
                    resolve(resp.data);
                })
        },
        //点击节点上触发的事件,传递三个参数,数据对象使用第一个参数
        nodeclick(data,dataObj,self)
        {
            //alert(data.label+",id="+data.id);
            this.typeinfo.id=data.id;
            this.typeinfo.pid=data.pid;
            this.typeinfo.label=data.label;
            this.typeinfo.seqno=data.seqno;
        },
        //保存分类方法
        dosave()
        {
            var _this = this;
             axios.post('http://localhost:6060/savetype',this.typeinfo)
                .then(function(resp){
                    if(resp.data)
                        _this.refreshtree();
                })
        },
        //保存子分类方法
        dochildsave()
        {
            //判断左侧树组件是否选择了一个节点
            var cnt=this.$refs['tree'].getCheckedNodes().length;
            if(cnt!=1)
            {
                this.$message('必须选择唯一父节点');
                return;
            }
            //通过this.$refs['tree']获取树对象,其中tree是树组件的ref属性
            var dataObj = this.$refs['tree'].getCheckedNodes()[0];
    
            this.typeinfo.id='';
            this.typeinfo.pid=dataObj.id;
            var _this = this;
            axios.post('http://localhost:6060/savetype',this.typeinfo)
                .then(function(resp){
                    if(resp.data)
                        _this.refreshtree();
                })
        }
    }

}
</script>

后台Controller


@RequestMapping("/loadtype")
 @ResponseBody
 public List<TypeInfo> getTypeJSON()
 {
  List<TypeInfo> rtn = getFirstNode();
  
  return rtn;
 }
  
 @RequestMapping("/loadtypechild")
 @ResponseBody
 public List<TypeInfo> getTypeByPid(Integer pid)
 {
  System.out.println("pid==="+pid);
  List<TypeInfo> rtn = addsrv.getTypeList(pid);
  
  return rtn;
 }
 
 private List<TypeInfo> getFirstNode()
 {
  TypeInfo root = addsrv.getRootType();
  List<TypeInfo> firstList = addsrv.getTypeList(root.getId());
  for(TypeInfo ti:firstList)
   recurseNode(ti);
  return firstList;
 }
 
 private void recurseNode(TypeInfo ti)
 {
  List<TypeInfo> children = addsrv.getTypeList(ti.getId());
  System.out.println("ti.id"+ti.getId()+",children="+children);
  if(children==null || children.size()==0)
   return;
  ti.setChildren(children);
  for(TypeInfo chd:children)
  {
   recurseNode(chd);
  }
 }
 
 @RequestMapping("/savetype")
 @ResponseBody
 public Boolean savetype(@RequestBody TypeInfo ti)
 {
  try {
   Integer id = ti.getId();
   if(id != null)
    addsrv.updateType(ti);
   else {
    addsrv.saveType(ti);
   }
   return true;
  } catch (Exception e) {
   return false;
  }
  
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue ElementUI实现异步加载树

本文链接: https://www.lsjlt.com/news/127668.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue ElementUI实现异步加载树
    本文实例为大家分享了vue ElementUI实现异步加载树的具体代码,供大家参考,具体内容如下 路由文件修改 import List from '@/components/li...
    99+
    2022-11-12
  • Vue elementUI实现树形结构表格与懒加载
    目录1、实现效果2、后端实现2.1 实体类2.2 数据库中的数据结构2.3 后端接口2.4 swagger测试后端结构功能是否正常3、前端实现3.1 页面中引入el-table组件3...
    99+
    2022-11-12
  • Vue组件库ElementUI实现表格加载树形数据教程
    ElementUI实现表格树形列表加载教程,供大家参考,具体内容如下 Element UI 是一套采用 Vue 2.0 作为基础框架实现的组件库,一套为开发者、设计师和产品经理准备的...
    99+
    2022-11-12
  • Vue如何实现异步加载about组件
    这篇文章主要介绍“Vue如何实现异步加载about组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue如何实现异步加载about组件”文章能帮助大家解决问题。异步加载about组件about.j...
    99+
    2023-07-04
  • Vue如何实现异步动态加载块
    本篇内容介绍了“Vue如何实现异步动态加载块”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先定义组件为异步加载define(['j...
    99+
    2023-07-04
  • Vue+Elementui实现树形控件右键菜单
    本文实例为大家分享了Vue+Element ui实现树形控件右键菜单的具体代码,供大家参考,具体内容如下 需求 实现树形控件右键菜单功能,有添加文件、删除文件、重命名功能 一、按需引...
    99+
    2022-11-13
  • Ajax如何实现异步加载
    小编给大家分享一下Ajax如何实现异步加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AJAX (Asynchronous J...
    99+
    2022-10-19
  • Ajax实现异步加载数据
    本文实例为大家分享了Ajax实现异步加载数据的具体代码,供大家参考,具体内容如下 项目结构如下 (需要导入一个JQuery的包,配置文件web.xml和springmvc-servl...
    99+
    2022-11-12
  • Android实现异步加载图片
    麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的.今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还是记录一下吧.因为麦洛之前实现异步加载图片...
    99+
    2023-05-31
    android 异步加载 roi
  • vue 组件异步加载方式(按需加载)
    目录组件异步加载(按需加载)1.使用() => import()2.使用resolve => require([’./_account’], re...
    99+
    2022-11-13
  • webpack2中怎么实现异步加载
    本篇文章为大家展示了webpack2中怎么实现异步加载,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。webpack提供的一个非常强大的功能就是code spliti...
    99+
    2022-10-19
  • vue实现一个懒加载的树状表格实例
    目录一个懒加载的树状表格实例安装模板js代码 使用el-table懒加载树形表格时的注意点1、版本问题2、数据显示3、滚动条4、数据结构5、el-table的fixed导致...
    99+
    2022-11-13
  • winform异步加载数据怎么实现
    在WinForm中实现异步加载数据可以使用BackgroundWorker组件或者使用Task类来实现。方法一:使用Backgrou...
    99+
    2023-10-10
    winform
  • Vue中怎么异步加载about组件
    Vue中怎么异步加载about组件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。异步加载about组件about.jsVue.compon...
    99+
    2022-10-19
  • LINQ XML树加载怎么实现
    本篇内容介绍了“LINQ XML树加载怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!LINQ XML树加载通过XElement类,有...
    99+
    2023-06-17
  • vue如何实现一个懒加载的树状表格
    这篇文章主要介绍“vue如何实现一个懒加载的树状表格”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue如何实现一个懒加载的树状表格”文章能帮助大家解决问题。一个懒加载的树状表格实例实现一个树状表格...
    99+
    2023-06-30
  • nodejs实现bigpipe异步加载页面方案
    Bigpipe介绍 Facebook首创的一种减少HTTP请求的,首屏快速加载的的异步加载页面方案。是前端性能优化的一个方向。 BigPipe与AJAX的比较 AJAX主要是XMLHttpRequest,前...
    99+
    2022-06-04
    加载 页面 方案
  • Android实现图片缓存与异步加载
    ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大量图片的应用中一年多,没有出现oom...
    99+
    2022-06-06
    异步加载 图片 异步 缓存 Android
  • 如何实现JavaScript文件的同步和异步加载
    这篇文章主要介绍了如何实现JavaScript文件的同步和异步加载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。同步加载可在html文件里以...
    99+
    2022-10-19
  • Android实现ListView异步加载图片的方法
    本文实例讲述了Android实现ListView异步加载图片的方法。分享给大家供大家参考。具体如下: ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源...
    99+
    2022-06-06
    方法 图片 listview Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作