vue的tree组件

看   https://github.com/vuejs/vue/tree/dev/examples/tree

超简单的demo,主要理解递归组件。暂时保存一下

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js tree view example</title>
    <style>
      body {
        font-family: Menlo, Consolas, monospace;
        color: #444;
      }
      .item {
        cursor: pointer;
      }
      .bold {
        font-weight: bold;
        display: inline-block;
        position: relative;
      }
      .show {
          position: absolute;
          left: -30px;
      }
      .main:hover .add{
        display: inline-block;
      }
      .add {
        display: none;
      }
      ul {
        margin-top: 0;
        line-height: 1.5em;
        list-style-type: none;
      }
    </style>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
 <body>
      <div id='app'>
        <md-tree class="item" :model="treeData"></md-tree>
      </div>
      <script type="text/javascript">
        Vue.component('MdTree', {
          name: 'md-tree',
          props: {
             model: Object
           },
          data () {
            return {
               open: false
            }
          },
          computed: {
            isFolder () {
              return this.model.children &&
              this.model.children.length
            }
          },
          template : `
          <li>
            <div
            :class="{bold: isFolder}" class="main">
            <span class="show" v-if="isFolder" @click="toggle">[{{open ? '-' : '+'}}]</span>
            {{model.name}}
            <span @click="addChild(model)" v-if="model.name !== '根节点'" class="add"> + </span>
            </div>
            <ul v-show="open" v-if="isFolder">
              <md-tree
                class="item"
                v-for="(model, index) in model.children"
                :key="index"
                :model="model">
              </md-tree>
            </ul>
          </li>`,
          methods: {
                toggle: function () {
                if (this.isFolder) {
                  this.open = !this.open
                }
              },
              changeType: function () {
                if (!this.isFolder) {
                  Vue.set(this.model, 'children', [])
                  this.addChild()
                  this.open = true
                }
              },
              addChild (model) {
                if (model.children) {
                  model.children.push({name: '新节点'})
                  this.open = true
                } else {
                   Vue.set(model, 'children', [
                      {name: '新节点'}
                    ])
                   this.open = true
                }
                console.log(model)              
              }
          }
       });


       var app = new Vue({
          el : '#app',
          data () {
            return {
              treeData: {
                name: '根节点',
                children: [
                  { name: '节点1' },
                  { name: '节点2' },
                  {
                    name: '节点3',
                    children: [
                      {
                        name: '节点3.1',
                        children: [
                          { name: '节点3.1.1' },
                          { name: '节点3.1.2' }
                        ]
                      },
                      { name: '节点3.2' },
                      { name: '节点3.3' },
                      {
                        name: '节点3.4',
                        children: [
                          { name: '节点3.4.1' },
                          { name: '节点3.4.2' }
                        ]
                      }
                    ]
                  }
                ]
              }
            }
          }
        });
     </script>

  </body>
  </html>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值