zoukankan      html  css  js  c++  java
  • vue树状结构(tree)

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <style>
        body {
      font-family: Menlo, Consolas, monospace;
      color: #444;
    }
    .item {
      cursor: pointer;
    }
    .bold {
      font-weight: bold;
    }
    ul {
      padding-left: 1em;
      line-height: 1.5em;
      list-style-type: dot;
    }
    </style>
    </head>
    <body>
    <script type="text/x-template" id="item-template">
      <li>
        <div
          :class="{bold: isFolder}"
          @click="toggle"
          @dblclick="makeFolder">
          {{ item.name }}
          <span v-if="isFolder">[{{ isOpen ? '-' : '+' }}]</span>
        </div>
        <ul v-show="isOpen" v-if="isFolder">
          <tree-item
            class="item1"
            v-for="(child, index) in item.children"
            :key="index"
            :item="child"
            @make-folder="$emit('make-folder', $event)"
            @add-item="$emit('add-item', $event)"
          ></tree-item>
          <li class="add" @click="$emit('add-item', item)">+</li>
        </ul>
      </li>
    </script>
    
    <p>(You can double click on an item to turn it into a folder.)</p>
    
    <!-- the demo root element -->
    <ul id="demo">
      <tree-item v-for="item in treeData"
        class="item2"
        :item="item"
        @make-folder="makeFolder"
        @add-item="addItem"
      ></tree-item>
    </ul>
    
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
    <script type="text/javascript">
    var treeData =  [
        { name: 'hello' },
        { name: 'wat' },
        {
          name: 'child folder',
          children: [
            {
              name: 'child folder',
              children: [
                { name: 'hello' },
                { name: 'wat' }
              ]
            },
            { name: 'hello' },
            { name: 'wat' },
            {
              name: 'child folder',
              children: [
                { name: 'hello' },
                { name: 'wat' }
              ]
            }
          ]
        }
      ]
    
    // define the tree-item component
    Vue.component('tree-item', {
      template: '#item-template',
      props: {
        item: Object
      },
      data: function () {
        return {
          isOpen: false
        }
      },
      computed: {
        isFolder: function () {
          return this.item.children &&
            this.item.children.length
        }
      },
      methods: {
        toggle: function () {
          if (this.isFolder) {
            this.isOpen = !this.isOpen
          }
        },
        makeFolder: function () {
          if (!this.isFolder) {
            this.$emit('make-folder', this.item)
            this.isOpen = true
          }
        }
      }
    })
    
    // boot up the demo
    var demo = new Vue({
      el: '#demo',
      data: {
        treeData: treeData
      },
      methods: {
        makeFolder: function (item) {
          Vue.set(item, 'children', [])
          this.addItem(item)
        },
        addItem: function (item) {
          item.children.push({
            name: 'new stuff'
          })
        }
      }
    })
    </script>
    </body>
    </html>
  • 相关阅读:
    equals与”==”的区别
    数学--数论--积性函数(初步)
    数学--数论-多重集排列组合与母函数
    数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)
    数学--数论--POJ281(线性同余方程)
    数学--数论--HDU1222 狼和兔子(最大公约数)
    数学--数论--HDU1576 A / B(逆元)
    VScode像Codeblocks一样,不启动调试和Debug直接运行
    数学--数论--鸽巢原理
    图论--拓扑排序--模板
  • 原文地址:https://www.cnblogs.com/shark1100913/p/11164747.html
Copyright © 2011-2022 走看看