zoukankan      html  css  js  c++  java
  • JSON 无限级添加 Key Value

    初始数据

    let data = [
          {
            "PositionGuid": "9c24277c-a1f7-4b3c-9284-877f6fba3d33",
            "TemplateGuid": "ab1aa04d-c43f-4956-b90b-0bd104d3e3ac",
            "DevNameID": "123",
            "DevName": "气象站",
            "Parent": "0",
            "DevLevel": 1,
            "Children": [
                  {
                    "PositionGuid": "92ab0f66-c806-4c33-80fc-a6d5a853e86b",
                    "TemplateGuid": "ab1aa04d-c43f-4956-b90b-0bd104d3e3ac",
                    "DevNameID": "12",
                    "DevName": "配电箱",
                    "Parent": "9c24277c-a1f7-4b3c-9284-877f6fba3d33",
                    "DevLevel": 2,
                    "Children": [
                          {
                            "PositionGuid": "7053861a-91be-4bcd-8872-35884cfa936b",
                            "TemplateGuid": "ab1aa04d-c43f-4956-b90b-0bd104d3e3ac",
                            "DevNameID": "11",
                            "DevName": "配电柜",
                            "Parent": "92ab0f66-c806-4c33-80fc-a6d5a853e86b",
                            "DevLevel": 3,
                            "Children": []
                          }
                         ]
                       }
                        ]
                      }
                    ]
    created() {
    // 是用来赋初始值和建立与上级的关联
      data.forEach(node => {
        console.log(node);
        this.parentToChild(node, (n) => {
          State是我们添加的Key值
          n.State = 0;//因为 Vue 无法探测普通的新增属性 
          //Vue.set()向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性
          //所以我们采纳vue.set的方法追加
           Vue.set(n,'disabled',false);
            })
          });
      this.tableData = data;
    }
    methods:{
      parentToChild(node, fn) {
      // 递归了要做什么,是通过fn来实现。递归的逻辑是固定的
      // 具体做什么是不固定的,但是递归的过程是相同的 通过传fn,就实现了递归过程的重用
        fn(node);
        if (node.Children && node.Children.length > 0) {
          node.Children.forEach(n => {
            this.parentToChild(n, fn)
         })
        }
      }
    }
  • 相关阅读:
    vue 对css样式进行修改
    vue之绑定数据+data、methods、computed、watch的基础用法
    vue安装 devtools失败的临时解决办法
    解决VMware Workstation 与 Device/Credential Guard 不兼容
    后渗透之meterpreter常用命令
    2020-7- 27
    PIL模块调整图片大小
    maven(一) maven到底是个啥玩意~
    noi前第十二场 题解
    noi前第十一场 题解
  • 原文地址:https://www.cnblogs.com/wgy0528/p/11237162.html
Copyright © 2011-2022 走看看