vue 树的使用

安装

npm install vue-jstree

<template>
    <div class="app-container">
        <h1>{{ msg }}</h1>
        <div>
            <v-jstree :data="data" allow-batch whole-row draggable @item-click="itemClick" ref="tree"></v-jstree>
        </div>
        <p>选择要编辑的节点</p>
        <div>
            <div style="width:600px; height:300px; margin: 0 auto;">
                <table>
					<tr>
						<td>
							节点编号
						</td>
						<td>
							<input disabled="disabled" v-model="editingItem.id" />
						</td>
					</tr>
                    <tr>
                        <td>
                            节点名称
                        </td>
                        <td>
                            <input v-model="editingItem.text" />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2">
                            <button @click="addChildNode">添加子节点</button>
                            <button @click="removeNode">删除节点</button>
                            <button @click="addBeforeNode">当前节点前添加节点</button>
                            <button @click="addAfterNode">当前节后添加节点</button>
                        </td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
</template>

<script>
    import VJstree from 'vue-jstree'
    export default {
        name: 'app',
        components: {
            VJstree
        },
        data() {
            return {
                msg: '编辑组织结构',
                searchText: '',
                editingItem: {},
                editingNode: null,
                data: [{
                    "text": "公司",
                    "children": [{
                            "text": "北京",
                        },
                        {
                            "text": "上海",
                        },
                        {
                            "text": "湖南",
                            "children": [{
                                "text": "长沙",
                            }]
                        },
                        {
                            "text": "湖北",
                            "children": [{
                                "text": "衡阳",
								"children": [{
										"text": "北京",
									},
									{
										"text": "上海",
									},
									{
										"text": "湖南",
										"children": [{
											"text": "长沙",
										}]
									},
									{
										"text": "湖北",
										"children": [{
											"text": "衡阳",
											"children": [{
													"text": "北京",
												},
												{
													"text": "上海",
												},
												{
													"text": "湖南",
													"children": [{
														"text": "长沙",
													}]
												},
												{
													"text": "湖北",
													"children": [{
														"text": "衡阳",
														"children": [{
																"text": "北京",
															},
															{
																"text": "上海",
															},
															{
																"text": "湖南",
																"children": [{
																	"text": "长沙",
																}]
															},
															{
																"text": "湖北",
																"children": [{
																	"text": "衡阳"
																}]
															},
															{
																"text": "广州",
															}
														]
													}]
												},
												{
													"text": "广州",
												}
											]
										}]
									},
									{
										"text": "广州",
									}
								]
                            }]
                        },
                        {
                            "text": "广州",
							"children": [{
									"text": "北京",
								},
								{
									"text": "上海",
								},
								{
									"text": "湖南",
									"children": [{
										"text": "长沙",
									}]
								},
								{
									"text": "湖北",
									"children": [{
										"text": "衡阳"
									}]
								},
								{
									"text": "广州",
								}
							]
                        }
                    ]
                }],
            }
        },
        methods: {
            itemClick(node) {
                this.editingNode = node
                this.editingItem = node.model
                console.log(node.model.text + ' clicked !')
            },
            inputKeyUp: function () {
                var text = this.searchText
                const patt = new RegExp(text);
                this.$refs.tree.handleRecursionNodeChilds(this.$refs.tree, function (node) {
                    if (text !== '' && node.model !== undefined) {
                        const str = node.model.text
                        if (patt.test(str)) {
                            node.$el.querySelector('.tree-anchor').style.color = 'red'
                        } else {
                            node.$el.querySelector('.tree-anchor').style.color = '#000'
                        } // or other operations
                    } else {
                        node.$el.querySelector('.tree-anchor').style.color = '#000'
                    }
                })
            },
            addChildNode: function () {
                if (this.editingItem.id !== undefined) {
                    this.editingItem.addChild({
                        text: "newNode"
                    })
                }
            },
            removeNode: function () {
                if (this.editingItem.id !== undefined) {
                    var index = this.editingNode.parentItem.indexOf(this.editingItem)
                    this.editingNode.parentItem.splice(index, 1)
                }
            },
            addBeforeNode: function () {
                if (this.editingItem.id !== undefined) {
                    this.editingItem.addBefore({
                        text: this.editingItem.text + " before"
                    }, this.editingNode)
                }
            },
            addAfterNode: function () {
                if (this.editingItem.id !== undefined) {
                    this.editingItem.addAfter({
                        text: this.editingItem.text + " after"
                    }, this.editingNode)
                }
            }
        }
    }
</script>

<style>
    /* #app {
        font-family: 'Avenir', Helvetica, Arial, sans-serif;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
        text-align: center;
        color: #2c3e50;
        margin-top: 60px;
    } */

    h1,
    h2 {
        font-weight: normal;
    }

    ul {
        list-style-type: none;
        padding: 0;
    }

    li {
        display: inline-block;
        margin: 0 10px;
    }

    a {
        color: #42b983;
    }

    div {
        display: block;
    }

    table {
        width: 100%;
        border-collapse: collapse;
        border: 1px solid #EEE;
        font-size: 14px;
    }

    table th {
        background: #EEE;
        border-bottom: 1px solid #CCC;
        padding: 4px;
    }

    table td {
        border: 1px solid #EEE;
        padding: 4px;
    }

    .icon-state-default {
        color: gray;
    }

    .icon-state-danger {
        color: red;
    }

    .icon-state-warning {
        color: yellow;
    }

    .icon-state-success {
        color: green;
    }
</style>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue可以使用ElementUI的形组件来展示形结构的数据。使用步骤如下: 1. 安装ElementUI组件库 可以通过npm或yarn安装ElementUI组件库,具体命令如下: ``` npm install element-ui --save ``` 或 ``` yarn add element-ui ``` 2. 引入ElementUI组件 在Vue项目的入口文件中,引入ElementUI组件库和样式文件,具体代码如下: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 3. 使用形组件 在Vue组件中,使用ElementUI的el-tree组件来展示形结构的数据,具体代码如下: ```html <template> <el-tree :data="treeData" :props="treeProps"></el-tree> </template> <script> export default { data() { return { treeData: [ { label: '一级 1', children: [ { label: '二级 1-1', children: [ { label: '三级 1-1-1' }, { label: '三级 1-1-2' } ] }, { label: '二级 1-2', children: [ { label: '三级 1-2-1' }, { label: '三级 1-2-2' } ] } ] }, { label: '一级 2', children: [ { label: '二级 2-1', children: [ { label: '三级 2-1-1' }, { label: '三级 2-1-2' } ] }, { label: '二级 2-2', children: [ { label: '三级 2-2-1' }, { label: '三级 2-2-2' } ] } ] } ], treeProps: { label: 'label', children: 'children' } } } } </script> ``` 其中,treeData是形数据,treeProps是形组件的配置项,用于指定形数据中的label和children字段。 以上就是使用ElementUI形组件的基本步骤。 ### 回答2: Vue是一种流行的JavaScript框架,用于构建用户界面。ElementUI是一个基于Vue的UI组件库,其中包含许多常见的UI组件,包括形组件。ElementUI的形组件使开发人员能够轻松创建形结构的界面元素,并可以满足各种需求。 要使用ElementUI的形组件,首先需要在Vue应用程序中安装ElementUI。有多种方法可以安装ElementUI,其中包括使用npm、CDN或下载源代码。在安装完成后,开发人员可以在需要使用形组件的地方包含ElementUI中的<el-tree>标记。 使用ElementUI的形组件非常灵活。开发人员可以通过简单的属性更改来自定义形组件的行为和外观。例如,可以使用“expand-on-click-node”属性来控制形节点是否可以通过单击展开/关闭。开发人员还可以使用“:data”属性来传递形节点的数据。此外,ElementUI还提供了许多事件和插槽,以便更好地控制形组件的行为。 在许多应用程序中,形结构是重要的用户界面元素。使用ElementUI的形组件可以使开发人员更轻松地创建和管理形结构,并可以提高应用程序的可维护性和性能。无论是开发单页面应用程序还是多页面应用程序,使用ElementUI的形组件都是一个不错的选择。 ### 回答3: Vue 使用 ElementUI 形组件非常方便。ElementUI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件,其中包括了形组件。以下是关于 Vue 使用 ElementUI 形组件的一些注意事项和步骤: 安装 ElementUI: 在使用 ElementUI 之前,需要先安装它。在命令行中执行以下命令即可: ``` npm install element-ui --save ``` 使用 ElementUI 形组件: 在 Vue 项目中使用 ElementUI 形组件,需要先引入 ElementUI 和相应的组件。在 main.js 中添加如下内容: ``` import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 接下来就可以在需要使用形组件的地方添加以下代码: ``` <template> <el-tree :data="data" :props="defaultProps"> </el-tree> </template> <script> export default { data() { return { data: [{ label: '一级 1', children: [{ label: '二级 1-1', children: [{ label: '三级 1-1-1' }] }] }, { label: '一级 2', children: [{ label: '二级 2-1', children: [{ label: '三级 2-1-1' }] }, { label: '二级 2-2', children: [{ label: '三级 2-2-1' }] }] }, { label: '一级 3', children: [{ label: '二级 3-1', children: [{ label: '三级 3-1-1' }] }, { label: '二级 3-2', children: [{ label: '三级 3-2-1' }] }] }], defaultProps: { children: 'children', label: 'label' } } } } </script> ``` 在这个例子中,我们使用了一个简单的形结构。需要注意的是,在 data 中定义了的结构,而在 defaultProps 中,则定义了的属性。 以上就是 Vue 使用 ElementUI 形组件的简单介绍。使用 ElementUI 提供的形组件,可以更加轻松地实现形结构的展示,并且具有良好的用户交互体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值