vue中使用elementui实现对树组件tree右键增删改功能

功能描述:

1、自定义树节点前展开收起图标

2、可对节点数据进行模糊查询

3、右击第一级节点可以进行同级节点增加

4、双击节点或点击修改节点 都可以对节点获取焦点并进行修改,回车修改成功

5、可对节点进行拖拽,实现节点移动功能 

6、右击节点可进行增删改

 效果图:

 html布局:

 html代码

 <div class="tree-container">
        <el-input placeholder="输入关键字进行过滤" v-model="filterText" class="search">
        </el-input>
        <el-tree :data="treeData" node-key="id" default-expand-all @node-click="handleLeftclick"
            @node-drag-start="handleDragStart" @node-drag-enter="handleDragEnter" @node-drag-leave="handleDragLeave"
            @node-drag-over="handleDragOver" @node-drag-end="handleDragEnd" @node-drop="handleDrop"
            @node-contextmenu="rightClick" :filter-node-method="filterNode" draggable :allow-drop="allowDrop"
            :allow-drag="allowDrag" ref="tree" class="tree-line">
            <span class="slot-t-node" slot-scope="{ node, data }" @dblclick="editNode(data)">
                <span v-show="!data.isEdit">
                    <span :class="[data.id >= 99 ? 'slot-t-node--label' : '']">
                        <i v-if="data.type == 'catalog'" class="el-icon-folder" />
                        <i v-if="data.type == 'menu'" class="el-icon-tickets" />
                        <i v-if="data.type == 'submenu'" class="el-icon-document" />
                        <span> {{ node.label }}</span>
                    </span>
                </span>
                <span v-show="data.isEdit">
                    <el-input class="slot-t-input" size="mini" autofocus v-model="data.label" :ref="'slotTreeInput' + data.id"
                        @blur.stop="NodeBlur(node, data)" @keydown.native.enter="NodeBlur(node, data)"></el-input>
                </span>
            </span>
        </el-tree>
        <div class="box-menu" v-show="menuVisible" :style="{ left: menu_left + 'px', top: menu_top + 'px' }">
            <div @click="addSameLevelNode(0)" v-show="firstLevel">
                <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;同级增加
            </div>
            <div class="add" @click="addChildNode()">
                <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;子级增加
            </div>
            <div class="delete" @click="deleteNode()">
                <i class="el-icon-remove-outline"></i>&nbsp;&nbsp;删除节点
            </div>
            <div class="edit" @click="editNode()">
                <i class="el-icon-edit"></i>&nbsp;&nbsp;修改节点
            </div>
        </div>
    </div>

CSS样式

<style scoped lang="less">
.el-tree>.is-leaf {
    color: transparent;
}
.tree-container /deep/ .el-tree-node__expand-icon.expanded {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
}
.tree-container /deep/ .el-tree-node__expand-icon.expanded {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
}
.tree-container /deep/ .el-icon-caret-right:before {
    background: url("../../assets/node-collapse.png") no-repeat;
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    font-size: 12px;
    background-size: 10px;
}
/*
  //有子节点 且已展开*/
.tree-container /deep/ .el-tree-node__expand-icon.expanded.el-icon-caret-right:before {
    background: url("../../assets/node-expand.png") no-repeat;
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    font-size: 12px;
    background-size: 10px;
}

/*  //没有子节点*/
.tree-container /deep/ .el-tree-node__expand-icon.is-leaf::before {
    background: transparent no-repeat 0 3px;
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    font-size: 12px;
    background-size: 10px;
}
/* 点击节点时的选中颜色 */
.tree-container /deep/.el-tree-node.is-current>.el-tree-node__content {
    color: #3D5ECC !important;
}
.tree-container /deep/ .el-tree-node__expand-icon {
    margin-left: 15px;
    // padding: 0px;
}
.tree-container /deep/ .el-tree-node__expand-icon.is-leaf {
    margin-left: 0px;
}
.tree-container /deep/ .el-tree-node {
    position: relative;
    padding-left: 16px;
}
.tree-container /deep/ .el-tree-node__children {
    padding-left: 16px;
}
.tree-container /deep/ .el-tree>.el-tree-node:before {
    border-left: none;
}
.tree-container /deep/ .el-tree>.el-tree-node:after {
    border-top: none;
}
.tree-container /deep/ .el-tree>.el-tree-node:before {
    border-left: none;
}
.tree-container /deep/ .el-tree>.el-tree-node:after {
    border-top: none;
}
.tree-container /deep/ .el-tree-node:before {
    content: "";
    left: 10px;
    position: absolute;
    right: auto;
    border-width: 1px;
}
.tree-container /deep/ .el-tree-node:after {
    content: "";
    left: 10px;
    position: absolute;
    right: auto;
    border-width: 1px;
}
.tree-container /deep/ .el-tree-node:before {
    border-left: 1px dashed #ccc;
    bottom: 0px;
    height: 100%;
    top: -19px;
    width: 1px;
}
.tree-container /deep/ .el-tree-node:after {
    border-top: 1px dashed #ccc;
    height: 25px;
    top: 20px;
    width: 20px;
}
.el-tree-node :last-child:before {
    height: 40px;
}
.tree-container {
    margin: 10px;
}
.tree-container /deep/ .el-tree .el-tree-node {
    position: relative;
}
.tree-container /deep/ .el-tree-node .el-tree-node__content {
    height: 34px;
    padding-left: 0px !important;
    border: none;
}
.tree-container /deep/ .el-tree-node .el-tree-node__content::before {
    border-left: 1px dashed #ccc;
    height: 100%;
    top: 0;
    width: 1px;
    margin-left: 1px;
    margin-top: 0px;
    z-index: 8;
}
.tree-container /deep/ .el-tree-node .el-tree-node__children .el-tree-node__content::before {
    border-left: 0px dashed #ccc;
    height: 100%;
    top: 0;
    width: 1px;
    margin-left: 1px;
    margin-top: 0px;
    z-index: 8;
}
.tree-container /deep/ .el-tree-node .el-tree-node__content::after {
    border-top: 1px dashed #ccc;
    height: 1px;
    top: 18px;
    width: 13px;
    margin-left: 1px;
    z-index: 8;
}
.tree-container /deep/ .el-tree-node .el-tree-node__children .el-tree-node__content::after {
    border-top: 0px dashed #ccc;
}
.tree-container .el-tree-node .el-tree-node__content::before,
.tree-container .el-tree-node .el-tree-node__content::after {
    content: "";
    position: absolute;
    right: auto;
}

.el-tree {
    width: 20%;
    margin-top: 10px;
}

.search {
    width: 20%;
    cursor: pointer;
}
.box-menu {
    width: 150px;
    position: absolute;
    z-index: 1000;
    background-color: #fff;
    box-shadow: 0px 0px 10px #ccc, 0px 0px 20px #ccc, 0px 0px 30px #ccc;
    padding: 10px;

    div {
        cursor: pointer;
        line-height: 30px;
    }

    div:active {
        color: blue;
    }
}
</style>

输入框校验

 NodeBlur(Node, data) {
            console.log(Node, data)
            if (data.label.length === 0) {
                this.$message.error('菜单名不可为空!')
                return false
            } else {
                if (data.isEdit) {
                    this.$set(data, 'isEdit', false)
                    console.log(data.isEdit)
                }
                this.$nextTick(() => {
                    this.$refs['slotTreeInput' + data.id].$refs.input.focus()
                })
            }
        },

查询功能

// 查询
        filterNode(value, data) {
            if (!value) return true
            return data.label.indexOf(value) !== -1
        },



  watch: {
        filterText(val) {
            this.$refs.tree.filter(val)
        }
    },

拖拽功能

allowDrop(draggingNode, dropNode, type) {
            if (dropNode.data.label === '二级 3-1') {
                return type !== 'inner'
            } else {
                return true
            }
        },
        allowDrag(draggingNode) {
            return draggingNode.data.label.indexOf('三级 3-2-2') === -1
        },


 handleDragStart(node, ev) {
            console.log('drag start', node)
        },
        handleDragEnter(draggingNode, dropNode, ev) {
            console.log('tree drag enter: ', dropNode.label)
        },
        handleDragLeave(draggingNode, dropNode, ev) {
            console.log('tree drag leave: ', dropNode.label)
        },
        handleDragOver(draggingNode, dropNode, ev) {
            console.log('tree drag over: ', dropNode.label)
        },
        handleDragEnd(draggingNode, dropNode, dropType, ev) {
            console.log('tree drag end: ', dropNode && dropNode.label, dropType)
        },
        handleDrop(draggingNode, dropNode, dropType, ev) {
            console.log('tree drop: ', dropNode.label, dropType)
        },

鼠标事件

 // 鼠标右击事件
        rightClick(event, object, Node, element) {
            console.log(event, object)
            this.currentData = object
            this.currentNode = Node
            if (Node.level === 1) {
                this.firstLevel = true
            } else {
                this.firstLevel = false
            }
            this.menuVisible = true
            document.addEventListener('click', this.foo)
           // 将菜单显示在鼠标点击旁边定位
            this.menu_left = event.clientX -140;
            this.menu_top = event.clientY - 40; 
   
        },
        // 鼠标左击事件
        handleLeftclick(data, node) {
            this.foo()
        },
        //  取消鼠标监听事件 菜单栏
        foo() {
            this.menuVisible = false
            //  要及时关掉监听,不关掉的是一个坑,不信你试试,虽然前台显示的时候没有啥毛病,加一个alert你就知道了
            document.removeEventListener('click', this.foo)
        },

 增加同级节点事件

  // 增加同级节点事件
        addSameLevelNode() {
            let id = Math.ceil(Math.random() * 100)
            var data = { id: id, label: '新增节点' }
            this.$refs.tree.append(data, this.currentNode.parent)
        },

增加子级节点事件 

 // 增加子级节点事件
        addChildNode() {
            console.log(this.currentData)
            console.log(this.currentNode)
            if (this.currentNode.level >= 3) {
                this.$message.error('最多只支持三级!')
                return false
            }
            let id = Math.ceil(Math.random() * 100)
            var data = { id: id, label: '新增节点' }
            this.$refs.tree.append(data, this.currentNode)
        },

删除节点

 // 删除节点
        deleteNode() {
            this.$refs.tree.remove(this.currentNode)
        },

编辑节点

 // 编辑节点
        editNode(data) {
            console.log(data)
            this.currentData = data ? data : this.currentData
            if (!this.currentData.isEdit) {
                this.$set(this.currentData, 'isEdit', true)
            }
            // 获取焦点
            this.$nextTick(() => {
                this.$refs['slotTreeInput' + this.currentData.id].focus()
            })
        },

整体代码

<template>
    <div class="tree-container">
        <el-input placeholder="输入关键字进行过滤" v-model="filterText" class="search">
        </el-input>
        <el-tree :data="treeData" node-key="id" default-expand-all @node-click="handleLeftclick"
            @node-drag-start="handleDragStart" @node-drag-enter="handleDragEnter" @node-drag-leave="handleDragLeave"
            @node-drag-over="handleDragOver" @node-drag-end="handleDragEnd" @node-drop="handleDrop"
            @node-contextmenu="rightClick" :filter-node-method="filterNode" draggable :allow-drop="allowDrop"
            :allow-drag="allowDrag" ref="tree" class="tree-line">
            <span class="slot-t-node" slot-scope="{ node, data }" @dblclick="editNode(data)">
                <span v-show="!data.isEdit">
                    <span :class="[data.id >= 99 ? 'slot-t-node--label' : '']">
                        <i v-if="data.type == 'catalog'" class="el-icon-folder" />
                        <i v-if="data.type == 'menu'" class="el-icon-tickets" />
                        <i v-if="data.type == 'submenu'" class="el-icon-document" />
                        <span> {{ node.label }}</span>
                    </span>
                </span>
                <span v-show="data.isEdit">
                    <el-input class="slot-t-input" size="mini" autofocus v-model="data.label" :ref="'slotTreeInput' + data.id"
                        @blur.stop="NodeBlur(node, data)" @keydown.native.enter="NodeBlur(node, data)"></el-input>
                </span>
            </span>
        </el-tree>
        <!-- <el-card class="box-card" ref="card" v-show="menuVisible">
                    <div @click="addSameLevelNode()" v-show="firstLevel">
                            <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;同级增加
                        </div>
                    <div class="add" @click="addChildNode()">
                            <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;子级增加
                        </div>
                    <div class="delete" @click="deleteNode()">
                            <i class="el-icon-remove-outline"></i>&nbsp;&nbsp;删除节点
                        </div>
                    <div class="edit" @click="editNode()">
                            <i class="el-icon-edit"></i>&nbsp;&nbsp;修改节点
                        </div>
                </el-card> -->
        <div class="box-menu" v-show="menuVisible" :style="{ left: menu_left + 'px', top: menu_top + 'px' }">
            <div @click="addSameLevelNode(0)" v-show="firstLevel">
                <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;同级增加
            </div>
            <div class="add" @click="addChildNode()">
                <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;子级增加
            </div>
            <div class="delete" @click="deleteNode()">
                <i class="el-icon-remove-outline"></i>&nbsp;&nbsp;删除节点
            </div>
            <div class="edit" @click="editNode()">
                <i class="el-icon-edit"></i>&nbsp;&nbsp;修改节点
            </div>
        </div>
    </div>
</template>
 
<script>
export default {
    name: 'tree',
    data() {
        return {
            eleId: '',
            isShow: false,
            currentData: '',
            currentNode: '',
            menuVisible: false,
            firstLevel: false,
            filterText: '',
            maxexpandId: 4,
            menu_left: 0,
            menu_top: 0,
            treeData: [{
                id: 1,
                label: '一级 1',
                isEdit: false,
                type: 'catalog',
                children: [{
                    id: 4,
                    label: '二级 1-1',
                    isEdit: false,
                    type: 'menu',
                    children: [{
                        id: 9,
                        label: '三级 1-1-1',
                        isEdit: false,
                        type: 'submenu',
                    }, {
                        id: 10,
                        label: '三级 1-1-2',
                        isEdit: false,
                        type: 'submenu',
                    }]
                }]
            }, {
                id: 2,
                label: '一级 2',
                isEdit: false,
                type: 'catalog',
                children: [{
                    id: 5,
                    label: '二级 2-1',
                    isEdit: false,
                    type: 'menu',
                }, {
                    id: 6,
                    label: '二级 2-2',
                    isEdit: false,
                    type: 'menu',
                }]
            }, {
                id: 3,
                label: '一级 3',
                isEdit: false,
                type: 'catalog',
                children: [{
                    id: 7,
                    label: '二级 3-1',
                    isEdit: false,
                    type: 'menu',
                }, {
                    id: 8,
                    label: '二级 3-2',
                    isEdit: false,
                    type: 'menu',
                    children: [{
                        id: 11,
                        label: '三级 3-2-1',
                        isEdit: false,
                        type: 'submenu',
                    }, {
                        id: 12,
                        label: '三级 3-2-2',
                        isEdit: false,
                        type: 'submenu',
                    }, {
                        id: 13,
                        label: '三级 3-2-3',
                        isEdit: false,
                        type: 'submenu',
                    }]
                }]
            }],
            defaultProps: {
                children: 'children',
                label: 'label'
            }
        }
    },
    methods: {
        NodeBlur(Node, data) {
            console.log(Node, data)
            if (data.label.length === 0) {
                this.$message.error('菜单名不可为空!')
                return false
            } else {
                if (data.isEdit) {
                    this.$set(data, 'isEdit', false)
                    console.log(data.isEdit)
                }
                this.$nextTick(() => {
                    this.$refs['slotTreeInput' + data.id].$refs.input.focus()
                })
            }
        },
        // 查询
        filterNode(value, data) {
            if (!value) return true
            return data.label.indexOf(value) !== -1
        },

        allowDrop(draggingNode, dropNode, type) {
            if (dropNode.data.label === '二级 3-1') {
                return type !== 'inner'
            } else {
                return true
            }
        },
        allowDrag(draggingNode) {
            return draggingNode.data.label.indexOf('三级 3-2-2') === -1
        },
        // 鼠标右击事件
        rightClick(event, object, Node, element) {
            console.log(event, object)
            this.currentData = object
            this.currentNode = Node
            if (Node.level === 1) {
                this.firstLevel = true
            } else {
                this.firstLevel = false
            }
            this.menuVisible = true
            document.addEventListener('click', this.foo)
           // 将菜单显示在鼠标点击旁边定位
            this.menu_left = event.clientX -140;
            this.menu_top = event.clientY - 40; 
   
        },
        // 鼠标左击事件
        handleLeftclick(data, node) {
            this.foo()
        },
        //  取消鼠标监听事件 菜单栏
        foo() {
            this.menuVisible = false
            //  要及时关掉监听,不关掉的是一个坑,不信你试试,虽然前台显示的时候没有啥毛病,加一个alert你就知道了
            document.removeEventListener('click', this.foo)
        },
        // 增加同级节点事件
        addSameLevelNode() {
            let id = Math.ceil(Math.random() * 100)
            var data = { id: id, label: '新增节点' }
            this.$refs.tree.append(data, this.currentNode.parent)
        },
        // 增加子级节点事件
        addChildNode() {
            console.log(this.currentData)
            console.log(this.currentNode)
            if (this.currentNode.level >= 3) {
                this.$message.error('最多只支持三级!')
                return false
            }
            let id = Math.ceil(Math.random() * 100)
            var data = { id: id, label: '新增节点' }
            this.$refs.tree.append(data, this.currentNode)
        },
        // 删除节点
        deleteNode() {
            this.$refs.tree.remove(this.currentNode)
        },
        // 编辑节点
        editNode(data) {
            console.log(data)
            this.currentData = data ? data : this.currentData
            if (!this.currentData.isEdit) {
                this.$set(this.currentData, 'isEdit', true)
            }
            // 获取焦点
            this.$nextTick(() => {
                this.$refs['slotTreeInput' + this.currentData.id].focus()
            })
        },
        handleDragStart(node, ev) {
            console.log('drag start', node)
        },
        handleDragEnter(draggingNode, dropNode, ev) {
            console.log('tree drag enter: ', dropNode.label)
        },
        handleDragLeave(draggingNode, dropNode, ev) {
            console.log('tree drag leave: ', dropNode.label)
        },
        handleDragOver(draggingNode, dropNode, ev) {
            console.log('tree drag over: ', dropNode.label)
        },
        handleDragEnd(draggingNode, dropNode, dropType, ev) {
            console.log('tree drag end: ', dropNode && dropNode.label, dropType)
        },
        handleDrop(draggingNode, dropNode, dropType, ev) {
            console.log('tree drop: ', dropNode.label, dropType)
        },
    },
    watch: {
        filterText(val) {
            this.$refs.tree.filter(val)
        }
    },
    mounted() {
    }
}
</script>
<style scoped lang="less">
.el-tree>.is-leaf {
    color: transparent;
}

.tree-container /deep/ .el-tree-node__expand-icon.expanded {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
}

.tree-container /deep/ .el-tree-node__expand-icon.expanded {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
}


.tree-container /deep/ .el-icon-caret-right:before {
    background: url("../../assets/node-collapse.png") no-repeat;
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    font-size: 12px;
    background-size: 10px;
}

/*
  //有子节点 且已展开*/
.tree-container /deep/ .el-tree-node__expand-icon.expanded.el-icon-caret-right:before {
    background: url("../../assets/node-expand.png") no-repeat;
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    font-size: 12px;
    background-size: 10px;
}

/*  //没有子节点*/
.tree-container /deep/ .el-tree-node__expand-icon.is-leaf::before {
    background: transparent no-repeat 0 3px;
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    font-size: 12px;
    background-size: 10px;
}

/* 点击节点时的选中颜色 */
.tree-container /deep/.el-tree-node.is-current>.el-tree-node__content {
    color: #3D5ECC !important;
}

.tree-container /deep/ .el-tree-node__expand-icon {
    margin-left: 15px;
}

.tree-container /deep/ .el-tree-node__expand-icon.is-leaf {
    margin-left: 0px;
}

.tree-container /deep/ .el-tree-node {
    position: relative;
    padding-left: 16px;
}

.tree-container /deep/ .el-tree-node__children {
    padding-left: 16px;
}

.tree-container /deep/ .el-tree>.el-tree-node:before {
    border-left: none;
}

.tree-container /deep/ .el-tree>.el-tree-node:after {
    border-top: none;
}

.tree-container /deep/ .el-tree>.el-tree-node:before {
    border-left: none;
}

.tree-container /deep/ .el-tree>.el-tree-node:after {
    border-top: none;
}

.tree-container /deep/ .el-tree-node:before {
    content: "";
    left: 10px;
    position: absolute;
    right: auto;
    border-width: 1px;
}

.tree-container /deep/ .el-tree-node:after {
    content: "";
    left: 10px;
    position: absolute;
    right: auto;
    border-width: 1px;
}

.tree-container /deep/ .el-tree-node:before {
    border-left: 1px dashed #ccc;
    bottom: 0px;
    height: 100%;
    top: -19px;
    width: 1px;
}

.tree-container /deep/ .el-tree-node:after {
    border-top: 1px dashed #ccc;
    height: 25px;
    top: 20px;
    width: 20px;
}

.el-tree-node :last-child:before {
    height: 40px;
}

.tree-container {
    margin: 10px;
}

.tree-container /deep/ .el-tree .el-tree-node {
    position: relative;
}

.tree-container /deep/ .el-tree-node .el-tree-node__content {
    height: 34px;
    padding-left: 0px !important;
    border: none;
}

.tree-container /deep/ .el-tree-node .el-tree-node__content::before {
    border-left: 1px dashed #ccc;
    height: 100%;
    top: 0;
    width: 1px;
    margin-left: 1px;
    margin-top: 0px;
    z-index: 8;
}

.tree-container /deep/ .el-tree-node .el-tree-node__children .el-tree-node__content::before {
    border-left: 0px dashed #ccc;
    height: 100%;
    top: 0;
    width: 1px;
    margin-left: 1px;
    margin-top: 0px;
    z-index: 8;
}

.tree-container /deep/ .el-tree-node .el-tree-node__content::after {
    border-top: 1px dashed #ccc;
    height: 1px;
    top: 18px;
    width: 13px;
    margin-left: 1px;
    z-index: 8;
}

.tree-container /deep/ .el-tree-node .el-tree-node__children .el-tree-node__content::after {
    border-top: 0px dashed #ccc;
}

.tree-container .el-tree-node .el-tree-node__content::before,
.tree-container .el-tree-node .el-tree-node__content::after {
    content: "";
    position: absolute;
    right: auto;
}

.el-tree {
    width: 20%;
    margin-top: 10px;
}

.search {
    width: 20%;
}

.item {
    padding: 18px 0;
}

.search {
    cursor: pointer;
}

.box-menu {
    width: 150px;
    position: absolute;
    z-index: 1000;
    background-color: #fff;
    box-shadow: 0px 0px 10px #ccc, 0px 0px 20px #ccc, 0px 0px 30px #ccc;
    padding: 10px;

    div {
        cursor: pointer;
        line-height: 30px;
    }

    div:active {
        color: blue;
    }
}
</style>

  • 14
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 在Vue使用ElementUI组件非常简单,只需要按照以下步骤即可: 1. 安装ElementUI:可以使用npm或yarn进行安装,命令如下: ``` npm install element-ui --save ``` 或者 ``` yarn add element-ui ``` 2. 在Vue项目引入ElementUI:在main.js引入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组件:在需要使用ElementUI组件Vue组件,直接使用即可,例如: ```html <template> <div> <el-button type="primary">主要按钮</el-button> </div> </template> ``` 以上就是在Vue使用ElementUI组件的基本步骤,希望能对你有所帮助。 ### 回答2: Vue.js 是一个流行的前端 JavaScript 框架之一,而 Element UI 是面向 Web 开发者的开源 UI 框架。当这两个框架交汇在一起时,就可以创建易于维护和可扩展的 Vue.js 应用程序。 使用 Element UI 组件库可以大大加速 Vue.js 应用程序的开发过程。如果您使用 Element UI,您将能够在几分钟内构建出功能齐全的 UI 功能。它包含许多常用的组件,如表格,菜单,选项卡,表单和按钮。 使用 Element UI 组件库的第一步是在您的 Vue.js 应用程序安装它。要使用 Element UI,您首先需要将它安装到您的项目。您可以通过 npm(Node.js 包管理器)或 Yarn(快速可靠的依赖管理器)来完成此操作。 使用 npm 安装 ElementUI,需要在命令提示符下输入以下命令: ``` npm install element-ui -S ``` 如果您使用的是 Yarn,您可以使用以下命令: ``` yarn add element-ui ``` 一旦您安装了 ElementUI,您就可以在您的 Vue.js 应用程序使用各种 ElementUI 组件了。您需要做的第一件事是将 ElementUI CSS 添加到您的页面。您可以将以下代码添加到您的 index.html 文件: ``` <link rel="stylesheet" href="//unpkg.com/element-ui/lib/theme-chalk/index.css"> ``` 接下来,在您的 Vue.js 组件引入 ElementUI 组件,例如: ``` <template> <el-button type="primary">Click me!</el-button> </template> <script> import { Button } from 'element-ui' export default { name: 'MyComponent', components: { 'el-button': Button } } </script> ``` 这就是使用 Element UI 组件的基础知识。您可以添加其他组件来构建您的 Vue.js 应用程序,例如对话框,弹出式菜单,警告框等等。这些组件使您的应用程序看起来更专业,使用户体验更加友好。 ### 回答3: Vue.js是一款流行的前端框架,其主要特点是数据的响应式更新和简化了DOM操作。而Element UI是一个开源的基于Vue.js的UI组件库,它提供了一系列的常用组件,能够方便地构建出美观且高效的Web应用程序界面。这里我们来介绍一下如何在Vue.js使用Element UI组件。 第一步:安装Element UI 我们可以通过npm或yarn来安装Element UI。 npm安装: npm i element-ui -S yarn安装: yarn add element-ui 第二步:引入Element UI 在我们的Vue项目使用Element UI,需要先在Vue入口文件main.js引入它,并且使用Vue.use()注册它: import Vue from 'vue' import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); 这里我们还需要注意,在引入Element UI时,也要同时引入Element UI的CSS样式文件。 第三步:使用Element UI组件 在以上步骤完成之后,我们就可以在vue使用Element UI组件了。例如,我们可以在template使用组件el-button来创建一个按钮: <template> <div> <el-button type="primary">主要按钮</el-button> </div> </template> 这里我们需要注意的是,我们必须在script引入el-button组件: <script> import { Button } from 'element-ui'; export default { components: { 'el-button': Button } } </script> 总结 以上就是在Vue使用Element UI组件的步骤,只需要三个简单的步骤就可以方便地使用Element UI组件,大大加快了我们构建Vue项目的开发效率。Element UI提供了丰富的组件库,可以满足我们在开发过程的大部分需求,所以在项目使用它也是非常不错的选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值