vue组件递归

6 篇文章 0 订阅

概念

组件可以通过 export default 的name 属性进行自己调用自己,形成递归组件。

使用

为了防止递归出现死循环,必须有一个结束条件。根据自己的需求可以使用 v-if 进行对应的条件判断
以下是我的一段数据:

[
 {
        "_class" : "ops.pojo.vo.StorageMapperings",
        "datas" : [ {
          "HostIp" : "192.168.2.130",
          "listenting" : [ {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "2181"
          }, {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "2888"
          }, {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "3888"
          } ],
          "StopCommand" : "systemctl stop zookeeper",
          "Owner" : "devops",
          "StartScript" : "/home/devops/zookeeper/bin/zkServer.sh",
          "StopScript" : "/home/devops/zookeeper/bin/zkServer.sh",
          "StartCommand" : "systemctl start zookeeper",
          "MainPath" : "/home/devops",
          "SoftType" : "MiddleWare",
          "OwnerGroup" : "devops",
          "version" : "zookeeper-3.4.10",
          "SoftName" : "zookeeper"
        }, {
          "HostIp" : "192.168.2.131",
          "listenting" : [ {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "2181"
          }, {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "2888"
          }, {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "3888"
          } ],
          "StopCommand" : "systemctl stop zookeeper",
          "Owner" : "devops",
          "StartScript" : "/home/devops/zookeeper/bin/zkServer.sh",
          "StopScript" : "/home/devops/zookeeper/bin/zkServer.sh",
          "StartCommand" : "systemctl start zookeeper",
          "MainPath" : "/home/devops",
          "SoftType" : "MiddleWare",
          "OwnerGroup" : "devops",
          "version" : "zookeeper-3.4.10",
          "SoftName" : "zookeeper"
        }, {
          "HostIp" : "192.168.2.132",
          "listenting" : [ {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "2181"
          }, {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "2888"
          }, {
            "targetIP" : "0.0.0.0",
            "protoType" : "tcp",
            "port" : "3888"
          } ],
          "StopCommand" : "systemctl stop zookeeper",
          "Owner" : "devops",
          "StartScript" : "/home/devops/zookeeper/bin/zkServer.sh",
          "StopScript" : "/home/devops/zookeeper/bin/zkServer.sh",
          "StartCommand" : "systemctl start zookeeper",
          "MainPath" : "/home/devops",
          "SoftType" : "MiddleWare",
          "OwnerGroup" : "devops",
          "version" : "zookeeper-3.4.10",
          "SoftName" : "zookeeper"
        } ],
        "mid" : "85d0c34cf09649cca2adf622bae44b57",
        "data" : { },
        "name" : "流程组件",
        "moduleName" : "软件安装"
      },
]

实例

首先,创建一个组件作为调用递归组件的父组件

<div class='content mmm_request' v-if='show_info'>
   <parameter :parameterData='detailData.info.request'></parameter>
</div>
import parameter from "./recursive.vue";
export default {
  data() {
    return {
      //该对象为后端传递的数据,detailData.info.request为上面列出是实际数据
      detailData: {},
    };
  },
 }

<parameter / >就是递归组件,实际使用时将数据通过 props 传入即可

<template>
    <div class='mmm_cmdb_converter_history_parameter' :class="{'isText':typeof(parameterData)=='string'}">
        <div v-if='Object.prototype.toString.call(parameterData) === "[object Object]"'>
            {
            <div v-for=' (val,key,index) in parameterData ' :key='index '>
                <span class='json_key' :title='key'>{{key}} :</span>
                <recursive :parameterData='val'></recursive>
            </div>
            },
        </div>
        <span v-else class='json_val'>
            {{parameterData}},
        </span>
    </div>
</template>
<script>
export default {
    name: 'recursive',
    data() {
        return {
        }
    },
    props: ['parameterData'],
    created() {

    },
    mounted() { },
    components: {},
    methods: {},
    watch: {},
}
</script>

效果图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值