vue递归组件的简单使用

一个关键问题是,递归组件怎么调用自身,这里关键在于组件的name属性,

在递归组件内,只要生命name属性,就可以直接调用组件自身!!

来个样例:

父组件:

复制代码
<template>
  <div>
    <item :data="searchParams"></item>
  </div>
</template>

<script>
export default {
  components:{
    item:()=> import("./comp/item"),
  },
  data(){
    return{
      searchParams:{
        name:"第一层",
        level:"1",
        list:[
          {
            name:"第二层",
            level:"2-1",
            list:null,
          },
          {
            name:"第二层",
            level:"2-2",
            list:[
              {
                name:"第三层",
                level:"2-2-1",
                list:[
                  {
                    name:"第四层",
                    level:"2-2-1-1"
                  }
                ]
              }
            ]
          },
          {
            name:"第二层",
            level:"2-3",
            list:[
              {
                name:"第三层",
                level:"2-3-1",
                list:[
                  {
                    name:"第四层",
                    level:"2-3-1-1"
                  }
                ]
              }
            ]
          },
        ]
      }
    }
  }
}
</script>

<style lang="scss" scoped>
  
</style>
复制代码

子组件:

复制代码
<template>
  <div class="item_wrap">
    <div class="item_name">{{data.name}}</div>
    <div class="item_level">{{data.level}}</div>
    <el-button @click="changeVal(data)">修改这个值</el-button>
    <el-button @click="addlist(data)">添加</el-button>
    <div v-if="data.list && isArray(data.list)">
      <ul 
        v-for="item in data.list" 
        :key="item.level"
        class="list_wrap">
        <item :data="item"></item>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  name:"item",
  props:{
    data:{
      type:Object,
      default:null
    }
  },
  data(){
    return{

    }
  },
  methods: {
    isArray(val){
      return (val  instanceof Array);
    },
    changeVal(data){
      data.name = "啦啦啦"
    },
    addlist(data){
      if(data.list && this.isArray(data.list)){
        data.list.push({
          name:"嘤嘤嘤",
          level:new Date().getTime()
        })
      }
    }
  },
}
</script>

<style lang="scss" scoped>
  
</style>
复制代码

 

效果:

 

 

 

 

 

 

posted @   古墩古墩  Views(370)  Comments(0Edit  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2019-12-10 用jquery做一个带导航的名单列表
2018-12-10 router 设置时 模板的新引法
点击右上角即可分享
微信分享提示