Vue实现最简单的树形控件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue Tree</title>
    <script src="http://cdn.jsdelivr.net/vue/1.0.26/vue.min.js"></script>
</head>
<style>
    .node {
        cursor: pointer;
        font-family: monospace;
        color: #333;
    }

    .node div:hover {
        background-color: antiquewhite;
    }

    .node-leaf {
        color: #999;
    }

    ul {
        padding-left: 1em;
        list-style-type: none;
    }
</style>
<body id="body">
<tree :data="treeData"></tree>
</body>


<script type="text/x-template" id="tree-node">
    <li :class="['node',node.children?'':'node-leaf']" v-for="node in data">
        <div v-if="node.children" @click="node.open = !node.open">[{{node.open?'-':'+'}}] {{node.name}}</div>
        <div v-else>[-] {{node.name}}</div>
        <ul v-if="node.children" v-show="node.open">
            <tree-node :data="node.children"></tree-node>
        </ul>
    </li>
</script>


<script>
    Vue.component('tree', {
        template: "<ul><tree-node :data='data'></tree-node></ul>",
        props: ['data'],
        components: {
            'tree-node': {
                name: "tree-node",
                template: '#tree-node',
                props: ['data']
            }
        }
    });

    new Vue({
        el: '#body',
        data: {
            treeData: [
                {open: false, name: 'hello'},
                {open: false, name: 'wat'},
                {
                    open: false,
                    name: 'child folder',
                    children: [
                        {
                            open: false,
                            name: 'child folder',
                            children: [
                                {open: false, name: 'hello'},
                                {open: false, name: 'wat'}
                            ]
                        },
                        {open: false, name: 'hello'},
                        {open: false, name: 'wat'},
                        {
                            open: false,
                            name: 'child folder',
                            children: [
                                {open: false, name: 'hello'},
                                {open: false, name: 'wat'}
                            ]
                        }
                    ]
                }
            ]
        }
    })
</script>
</html>

 

转载于:https://my.oschina.net/hellovivi/blog/706446

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值