vue2.x树状结构(递归)

一、数据结构(无限级)
在这里插入图片描述
二、父组件
样式公共部分点这里 https://blog.csdn.net/qq_36529240/article/details/123506889

<div class="anwer-box">
  <TreeList
     :treeItem="treeItem"
   ></TreeList>
 </div>
 //js
 import TreeList from './treeItem/index.vue'
  components: {
    TreeList,
  },

三、子组件
关键还是子组件循环调用自己
值得注意的地方就是需要加 name: “TreeList”,不然无法区分是调用的自己

<template>
  <div>
    <div v-for="(data, ind) in treeItem" :key="ind">
      <div class="anwer-box-ul">
        <div class="dis-flex justify-between">
          <div class="dis-flex">
            <span class="fs-12">{{ data.numberUserName }}:</span>
            <span class="fs-12" style="padding-left: 15px">{{
              data.content
            }}</span>
          </div>
          <span class="fs-12 cr-999">{{ data.updateTime | timeago }}</span>
        </div>

        <div class="dis-flex justify-between problem-box-right-icon">
          <div class="dis-flex items-center right-icon">
            <div class="" @click="anwerShow(data)">
              {{ data.numberAnswers }}人回答
            </div>
            <div class="dis-flex items-center" @click="problemaZan(data)">
              <span
                class="icon iconfont fs-18"
                :class="{ 'cr-blue': data.isGive == 1 }"
                >&#xec8c;</span
              >
              <span class="num" :class="{ 'cr-blue': data.isGive == 1 }">{{
                data.numberLikes
              }}</span>
            </div>
          </div>
          <div
            class="my-anwer dis-flex items-center"
            v-if="userId != data.memberUserId"
          >
            <span class="icon iconfont cr-999">&#xe635;</span>
            <span class="num fs-14 cr-999" @click="anwerMyClick(data)"
              >我的回答</span
            >
          </div>
        </div>
      </div>
      <TreeList
        class="item"
        v-if="data.flag"
        :key="'son' + data.id"
        :treeItem="data.children"
      ></TreeList>
    </div>
  </div>
</template>

<script>
export default {
  name: 'TreeList',
  props: {
    treeItem: {
      type: [],
      default() {
        return []
      },
    },
  },
  data: function () {
    return {
      userId: '123456',//用户id
    }
  },
  computed: {},
  created() {
    //console.log(this.treeItem)
  },
  methods: {
    
  },
}
</script>
<style lang="scss" scoped>
 .problem-box-ul {
        img {
          width: 40px;
          height: 40px;
          border-radius: 20px;
        }
        .problem-box-right {
          width: 760px;
          padding-left: 15px;
          .name {
            font-size: 13px;
            padding-bottom: 10px;
          }
          .problem-box-right-icon {
            padding-top: 20px;
            .right-icon {
              .num {
                padding-left: 5px;
              }

              div {
                cursor: pointer;
                margin-right: 93px;
                font-size: 14px;
                color: #998;

                &:hover {
                  color: #409eff;
                }
              }
            }
            .my-anwer {
              cursor: pointer;
              .num {
                padding-left: 5px;
              }
              &:hover {
                span {
                  color: #409eff;
                }
              }
            }
          }
          
        }
      }
     .anwer-box-ul {
       height: 40px;
        width: 100%;
        padding: 10px;
        margin-top: 5px;
        background: rgba(0, 0, 0, 0.03);
        .problem-box-right-icon {
          padding-top: 8px;
        }
      }

</style>

完结
(后续变动会继续写到其他文章。比如:数据过多卡顿时,接口只返回第一层数据,然后点击按钮,查询子级并插入到父级children)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2.x和Vue3.x是Vue.js的两个主要版本。Vue2.x是目前国内市场上最流行的前端应用开发框架之一,而Vue3.x则是最新版本。Vue2.x的官方文档可以在https://v2.cn.vuejs.org找到,而Vue3.x的官方文档可以在https://cn.vuejs.org找到。\[1\] 使用Vue2.x的步骤如下: 1. 下载Vue.js和Vuex模块。 2. 创建一个store文件夹,并在其中创建store.js文件,引入VueVuex。 3. 使用Vue.use引入Vuex。 4. 在main.js中引入store,并在实例化Vue对象时加入store对象。 5. 在组件中可以通过this.$store来使用store实例。\[2\] 在Vue2.x中,可以通过注册全局的方式来使用Vuex。在main.js中引入store,并在实例化Vue对象时加入store对象,然后就可以在组件中通过this.$store来使用store实例。\[2\] 在Vue3.x中,可以使用单库模式进行初始化。首先安装Vuex模块,然后在store/index.js中引入VueVuex,并使用Vue.use引入Vuex。在入口文件中引入store,并在实例化Vue对象时加入store对象。然后就可以在组件中通过this.$store来使用store实例。\[3\] #### 引用[.reference_title] - *1* [Vue2.x基础](https://blog.csdn.net/weixin_52218117/article/details/127270468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Vue系列之---vue2.0 Vuex](https://blog.csdn.net/duanhy_love/article/details/103148874)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值