牛骨文教育服务平台(让学习变的简单)
博文笔记

基于vue.js 2.0,不使用webpack的nodejs服务,只在浏览器上单独使用在Element UI的Tree树形控件

创建时间:2017-04-13 投稿人: 浏览次数:14146

Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动。

如果你是有经验的前端开发者,想知道 Vue.js 与其它库/框架的区别,查看对比其它框架。

Element UI 是一套采用 Vue 2.0 作为基础框架实现的组件库,它面向企业级的后台应用,能够帮助你快速地搭建网站,极大地减少研发的人力与时间成本。在这个月的 NingJS 上我们开源了这个项目,当时它的文档还没有准备好。今天,经过两周多的完善, Element UI 的文档正式上线啦!目前它处于 rc 阶段,正式版将于 Vue 2.0 发布后第一时间跟进。 欢迎大家来使用和完善,一起把它做成 Vue 最好的企业级组件库。

Element UI的Tree树形控件官网例子

http://element.eleme.io/#/zh-CN/component/tree

<el-tree
  :data="data2"
  :props="defaultProps"
  show-checkbox
  node-key="id"
  default-expand-all
  :expand-on-click-node="false"
  :render-content="renderContent">
</el-tree>

<script>
  let id = 1000;

  export default {
    data() {
      return {
        data2: [{
          id: 1,
          label: "一级 1",
          children: [{
            id: 4,
            label: "二级 1-1",
            children: [{
              id: 9,
              label: "三级 1-1-1"
            }, {
              id: 10,
              label: "三级 1-1-2"
            }]
          }]
        }, {
          id: 2,
          label: "一级 2",
          children: [{
            id: 5,
            label: "二级 2-1"
          }, {
            id: 6,
            label: "二级 2-2"
          }]
        }, {
          id: 3,
          label: "一级 3",
          children: [{
            id: 7,
            label: "二级 3-1"
          }, {
            id: 8,
            label: "二级 3-2"
          }]
        }],
        defaultProps: {
          children: "children",
          label: "label"
        }
      }
    },

    methods: {
      append(store, data) {
        store.append({ id: id++, label: "testtest", children: [] }, data);
      },

      remove(store, data) {
        store.remove(data);
      },

      renderContent(h, { node, data, store }) {
        return (
          <span>
            <span>
              <span>{node.label}</span>
            </span>
            <span style="float: right; margin-right: 20px">
              <el-button size="mini" on-click={ () => this.append(store, data) }>Append</el-button>
              <el-button size="mini" on-click={ () => this.remove(store, data) }>Delete</el-button>
            </span>
          </span>);
      }
    }
  };
</script>

只使用浏览器方式运行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>树控件测试</title>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="/res/css/vue/element-ui-1.2.8.css">
</head>
<body>
<div id="app">
    {{ message }}
</div>

<div id="treeView">
    <el-tree
            :data="data2"
            :props="defaultProps"
            show-checkbox
            node-key="id"
            default-expand-all
            :expand-on-click-node="false"
            :render-content="renderContent">
    </el-tree>
</div>

<script src="/res/js/vue/vue-2.2.0.min.js"></script>
<script src="/res/js/vue/element-ui-1.2.8.js"></script>

<script type="text/javascript">
    var app = new Vue({
        el: "#app",
        data: {
            message: "树控件测试"
        }
    });

    var treeView = new Vue({
        el: "#treeView",
        data: {
            baseId:1000,
            data2: [{
                id: 1,
                label: "一级 1",
                children: [{
                    id: 4,
                    label: "二级 1-1",
                    children: [{
                        id: 9,
                        label: "三级 1-1-1"
                    }, {
                        id: 10,
                        label: "三级 1-1-2"
                    }]
                }]
            }, {
                id: 2,
                label: "一级 2",
                children: [{
                    id: 5,
                    label: "二级 2-1"
                }, {
                    id: 6,
                    label: "二级 2-2"
                }]
            }, {
                id: 3,
                label: "一级 3",
                children: [{
                    id: 7,
                    label: "二级 3-1"
                }, {
                    id: 8,
                    label: "二级 3-2"
                }]
            }],
            defaultProps: {
                children: "children",
                label: "label"
            }
        },
        methods:{
            append:function(store, data) {
                store.append({ id: id++, label: "testtest", children: [] }, data);
            },
            remove:function(store, data) {
                store.remove(data);
            },
            renderContent:function(createElement, { node, data, store }) {
                var self = this;
                return createElement("span", [
                    createElement("span", node.label),
                    createElement("span", {attrs:{
                        style:"float: right; margin-right: 20px"
                    }},[
                        createElement("el-button",{attrs:{
                            size:"mini"
                        },on:{
                            click:function() {
                                console.info("点击了节点" + data.id + "的添加按钮");
                                store.append({ id: self.baseId++, label: "testtest", children: [] }, data);
                            }
                        }},"添加"),
                        createElement("el-button",{attrs:{
                            size:"mini"
                        },on:{
                            click:function() {
                                console.info("点击了节点" + data.id + "的删除按钮");
                                store.remove(data);
                            }
                        }},"删除"),
                    ]),
                ]);
            }
        }
    })
</script>

</body>
</html>

效果


参考Vue的Render函数,使用createElement的方式重新渲染了树的子节点

https://cn.vuejs.org/v2/guide/render-function.html


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。