表头主要复杂在:
1,有三层,一层是大类,第二层是具体项,第三层是标准值/对比值
2,首列和末尾列是一层
3,整个表格的维度是根据数据的输入自己生成,也就是动态的
下面是在 vue + eleUI 中的解决方案:
<el-table :data="tableData" border style="width: 100%" max-height="700" v-loading="areaLoading" element-loading-text="拼命加载中">
<el-table-column fixed label="IP" prop="ip" width="180"></el-table-column>
<el-table-column v-for="(item, index) in itemList" :key="index" :label="item.label">
<el-table-column :label="standard_name" v-for="(standard,standard_name) in item.standard" width="150">
<el-table-column :label="standard" min-width="150">
<template scope="scope">
<span>{{scope.row.list[item.label][standard_name]['value']}}</span>
</template>
</el-table-column>
</el-table-column>
</el-table-column>
<el-table-column fixed="right" label="验收结果" width="100">
<template scope="scope">
<span :class="{'unqualified-color': !scope.row.result}">{{scope.row.result ? '合格' : '不合格'}}</span>
</template>
</el-table-column>
</el-table>
其对应data:
//整理出所有的label和标准对象的属性
itemList: [],
//实际数据
tableData:[]
《方法二》
开发环境
1.安装webpack
npm install -g webpack
- 1
2.安装vue-cli
vue-cli是什么?
vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的。
使用步骤:
安装vue-cli:
npm install -g vue-cli
- 1
使用vue-cli构建项目
vue init webpack project-name //创建一个基于webpack模板的名为project-name的项目
- 1
目前可用的模板包括:
- browserify–全功能的Browserify + vueify,包括热加载,静态检测,单元测试。
- browserify-simple–一个简易的Browserify + vueify,以便于快速开始。
- webpack–全功能的Webpack + vueify,包括热加载,静态检测,单元测试。
- webpack-simple–一个简易的Webpack + vueify,以便于快速开始。
安装项目依赖
cd project-name //进入项目目录 npm install //安装项目依赖 npm run dev //运行项目
- 1
- 2
- 3
此时在浏览器打开:localhost:8080即可看到欢迎页。
关于webpack和vue-cli的更多使用方法参见官方文档。
但是这个只能在本地跑,要如何在我们自己的服务器上访问呢?此时需要执行
npm run build
- 1
搭建开发环境
本来想用vue-cli重新创建项目,试了几次总是出现各种问题,没办法成功。最后在仔细查看
Element-UI
的官方文档的 快速上手 部分的时候发现饿了么
团队给了一个他们自己的 项目模板 。于是我就用这个模板来尝试了下,结果成功了。所以,如果你不想太折腾的话,建议还是使用官方给的项目模板,可以省很多事。
第一步:安装项目模板
克隆/下载项目模板
将下载的模板放到你项目的根目录下
安装依赖
npm install
- 1
运行项目模板
npm run dev
- 1
此时在浏览器打开:localhost:8080即可看到欢迎页。
项目模板里已经把需要配置的文件都配置好了。
第二步:安装element-ui
第一步,我们成功安装了项目模板,接下来,我们需要安装element-ui到项目下。
npm i element-ui@next -D
- 1
开始使用
接下来我们就可以参照
Element-UI
的官方文档上手开发了。
例子
我们参照官方的按钮组件使用说明,在项目模板的基础上做一个按钮的例子。其它文件不需要改动,只修改App.vue文件的内容。代码如下:
App.vue
<template>
<div id="app">
<img src="./assets/logo.png">
<h1>{{ msg }}</h1>
<el-button @click.native="startHacking">Let's do it</el-button>
<div class="block">
<span class="demonstration">显示默认颜色</span>
<span class="wrapper">
<el-button type="success">成功按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
<el-button type="info">信息按钮</el-button>
</span>
</div>
<br/>
<div class="block">
<span class="demonstration">hover 显示颜色</span>
<span class="wrapper">
<el-button :plain="true" type="success">成功按钮</el-button>
<el-button :plain="true" type="warning">警告按钮</el-button>
<el-button :plain="true" type="danger">危险按钮</el-button>
<el-button :plain="true" type="info">信息按钮</el-button>
</span>
</div>
</div>
</template>
<script>
export default {
data () {
return {
msg: 'Use Vue 2.0 Today!'
}
},
methods: {
startHacking () {
this.$notify({
title: 'It Works',
message: 'We have laid the groundwork for you. Now it\'s your time to build something epic!',
duration: 6000
})
}
}
}
</script>
<style>
body {
font-family: Helvetica, sans-serif;
}
</style>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
效果如下图所示:
使用过程中碰到的问题:
1. phantomjs安装失败
由于源的问题,安装phantomjs必须要“搭梯子”,使用内网无法下载。所以解决的方法有两种:
方法一:通过科学上网,然后安装。
方法二:对于不知道怎么“搭梯子”的同学,可以通过更改源来下载,操作方法如下:
npm install phantomjs --phantomjs_cdnurl=http://cnpmjs.org/downloads
- 1
2.打开页面乱码
通过 Element-UI
官方提供的项目模板开发,会发现在浏览器打开页面的时候,中文是乱码的。如下图所示:
但html
页面中已经设置了<meta chartset='utf-8'>
。
仔细查看该页面所涉及的文件的编码格式的时候,发现引用的App.vue
文件的编码格式是GBK
,所以把该文件编码格式改为UTF-8
即可。
“ 使用VUE开发多级多选树形菜单组件 ”
要开发一个这样的多级多选菜单组件,功能是:
- 点击父标题栏可以打开与折叠子列表
- 点击父标题栏的勾选图标可以全选或取消子列表
- 点击子列表的勾选图标达到全选时,父标题栏的勾选图标自动勾选;反之,没达到全选时,父标题栏的勾选图标自动取消勾选
- 当所有父标题栏的勾选图标达到全选时,最底下那个全选框自动勾选;反之,没达到全选时,最底下那个全选框自动取消勾选
点击最底下那个全选框可以全选或取消全部的勾选图标
所以总结起来我们重点要利用子列表勾选了哪些项来计算出父标题与底下的全选框是自动勾选还是自动取消,并且父标题与底下的全选框在选择变化时子列表应有什么变化。要做到以上,实现过程是:
构建我们model层数据
datas : [
{
//用于判断是否展示子列表
isShowListItem : false,
//用于记录选中了哪些子项
selected : [],
//父标题
listTitle : "保利南悦湾",
//子列表
listItem : [
{
id : 1,
name : "李小龙"
},
{
id : 2,
name : "周星驰"
},
{
id : 3,
name : "周杰伦"
}
]
},
{
isShowListItem : false,
selected : [],
listTitle : "南庄万科城",
listItem : [
{
id : 4,
name : "大魔王"
},
{
id : 5,
name : "老妖怪"
}
]
}
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
记录子列表勾选了哪些项
子列表通过v-model=”data.selected”去双向绑定到selected数组中,当子列表项的checked发生变化时,就会把当前项的id记录到selected数组里去
<input
type="checkbox"
:value="item.id"
v-model="data.selected"
>
- 1
- 2
- 3
- 4
- 5
当父标题勾选变化时的处理方法
自动处理父标题勾选图标的变化
在HTML里,通过绑定:checked=”isTitleChecked(data)”,这时,每当其他项变化时,父标题都会调用一下isTitleChecked这个方法去判断一下这时自己的checked状态是true还是false,从而达到根据子项选中数目不同,父标题自动变化的目的。
通过@change=”changeTitleChecked(data,$event)”,每当父标题主动勾选或取消时触发
父标题HTML
<input :id="data.listTitle"
class="list-input"
type="checkbox"
:checked="isTitleChecked(data)"
@change="changeTitleChecked(data,$event)"
>
- 1
- 2
- 3
- 4
- 5
- 6
父标题JS
- changeTitleChecked方法:当主动触发父标题的勾选图标时,如果这次触发chaeked的状态是true,则要把子列表项中没选中的全部选中,即将它们全部加进selected数组中;如果是false,则要把子列表项全部取消选中,即清空selected数组。
- isTitleChecked方法:当子列表项全部选中时自动勾选父标题。
/**
* 当父标题状态变化时的处理方法
* @param data [当前项的data]
* @param event [当前项的event]
*/
changeTitleChecked : function (data,event) {
if (event.target.checked === true) {
data.listItem.forEach(function (item) {
data.selected.indexOf(item.id) === -1 && data.selected.push(item.id);
})
}else {
data.selected = [];
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
/**
* 判断父标题选择状态
* @param data [当前项的data]
* @returns {boolean}
*/
isTitleChecked : function (data) {
var _selected = data.selected;
var _listItem = data.listItem;
// 验证selected中是否含有全部的item的id 如果是 证明title要选中
return _listItem.every(function (item) {
return _selected.indexOf(item.id) != -1;
});
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
当底下的全选框变化时的处理方法
自动处理底下的全选框的变化
全选框HTML:
<input id="all-checked"
type="checkbox"
:checked="isAllChecked()"
@change="changeAllChecked($event)"
>
- 1
- 2
- 3
- 4
- 5
全选框JS:
- changeAllChecked方法:当主动触发全选框时,如果checked为true,则将全部的子项都放进selected数组里;反之则清空全部selected数组。
- isAllChecked 方法:判断selected数组的长度是否等于全部子项数,如果相等,则全选框checked状态设为true。
/**
* 全选框change事件的回调处理方法
* @param event
*/
changeAllChecked : function (event) {
if (event.target.checked === true) {
this.datas.forEach(function (data) {
data.listItem.forEach(function (item) {
data.selected.indexOf(item.id) === -1 && data.selected.push(item.id);
})
})
}else {
this.datas.forEach(function (data) {
data.selected = [];
})
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
/**
* 判断全选框选择状态
* @returns {boolean}
*/
isAllChecked : function () {
return this.datas.every(function (data) {
return data.selected.length === data.listItem.length;
});
}
vue组件库的总结
UI组件
- element - 饿了么出品的Vue2的web UI工具套件
- Vux - 基于Vue和WeUI的组件库
- mint-ui - Vue 2的移动UI元素
- iview - 基于 Vuejs 的开源 UI 组件库
- Keen-UI - 轻量级的基本UI组件合集
- vue-material - 通过Vue Material和Vue 2建立精美的app应用
- muse-ui - 三端样式一致的响应式 UI 库
- vuetify - 为移动而生的Vue JS 2组件框架
- vonic - 快速构建移动端单页应用
- eme - 优雅的Markdown编辑器
- vue-multiselect - Vue.js选择框解决方案
- vue-table - 简化数据表格
- VueCircleMenu - 漂亮的vue圆环菜单
- vue-chat - vuejs和vuex及webpack的聊天示例
- radon-ui - 快速开发产品的Vue组件库
- vue-waterfall - Vue.js的瀑布布局组件
- vue-carbon - 基于 vue 开发MD风格的移动端
- vue-beauty - 由vue和ant design创建的优美UI组件
- vue-blu - 帮助你轻松创建web应用
- vueAdmin - 基于vuejs2和element的简单的管理员模板
- vue-syntax-highlight - Sublime Text语法高亮
- vue-infinite-scroll - VueJS的无限滚动指令
- Vue.Draggable - 实现拖放和视图模型数组同步
- vue-awesome-swiper - vue.js触摸滑动组件
- vue-calendar - 日期选择插件
- bootstrap-vue - 应用于Vuejs2的Twitter的Bootstrap 4组件
- vue-swipe - VueJS触摸滑块
- vue-amap - 基于Vue 2和高德地图的地图组件
- vue-chartjs - vue中的Chartjs的封装
- vue-datepicker - 日历和日期选择组件
- markcook - 好看的markdown编辑器
- vue-google-maps - 带有双向数据绑定Google地图组件
- vue-progressbar - vue轻量级进度条
- vue-picture-input - 移动友好的图片文件输入组件
- vue-infinite-loading - VueJS的无限滚动插件
- vue-upload-component - Vuejs文件上传组件
- vue-datetime-picker - 日期时间选择控件
- vue-scroller - Vonic UI的功能性组件
- vue2-calendar - 支持lunar和日期事件的日期选择器
- vue-video-player - VueJS视频及直播播放器
- vue-fullcalendar - 基于vue.js的全日历组件
- rubik - 基于Vuejs2的开源 UI 组件库
- VueStar - 带星星动画的vue点赞按钮
- vue-mugen-scroll - 无限滚动组件
- mint-loadmore - VueJS的双向下拉刷新组件
- vue-tables-2 - 显示数据的bootstrap样式网格
- vue-virtual-scroller - 带任意数目数据的顺畅的滚动
- DataVisualization - 数据可视化
- vue-quill-editor - 基于Quill适用于Vue2的富文本编辑器
- Vueditor - 所见即所得的编辑器
- vue-html5-editor - html5所见即所得编辑器
- vue-msgbox - vuejs的消息框
- vue-slider - vue 滑动组件
- vue-core-image-upload - 轻量级的vue上传插件
- vue-slide - vue轻量级滑动组件
- vue-lazyload-img - 移动优化的vue图片懒加载插件
- vue-drag-and-drop-list - 创建排序列表的Vue指令
- vue-progressive-image - Vue的渐进图像加载插件
- vuwe - 基于微信WeUI所开发的专用于Vue2的组件库
- vue-dropzone - 用于文件上传的Vue组件
- vue-charts - 轻松渲染一个图表
- vue-swiper - 易于使用的滑块组件
- vue-images - 显示一组图片的lightbox组件
- vue-carousel-3d - VueJS的3D轮播组件
- vue-region-picker - 选择中国的省份市和地区
- vue-typer - 模拟用户输入选择和删除文本的Vue组件
- vue-impression - 移动Vuejs2 UI元素
- vue-datatable - 使用Vuejs创建的DataTableView
- vue-instant - 轻松创建自动提示的自定义搜索控件
- vue-dragging - 使元素可以拖拽
- vue-slider-component - 在vue1和vue2中使用滑块
- vue2-loading-bar - 最简单的仿Youtube加载条视图
- vue-datepicker - 漂亮的Vue日期选择器组件
- vue-video - Vue.js的HTML5视频播放器
- vue-toast-mobile - VueJS的toast插件
- vue-image-crop-upload - vue图片剪裁上传组件
- vue-tooltip - 带绑定信息提示的提示工具
- vue-highcharts - HighCharts组件
- vue-touch-ripple - vuejs的触摸ripple组件
- coffeebreak - 实时编辑CSS组件工具
- vue-datasource - 创建VueJS动态表格
- vue2-timepicker - 下拉时间选择器
- vue-date-picker - VueJS日期选择器组件
- vue-scrollbar - 最简单的滚动区域组件
- vue-quill - vue组件构建quill编辑器
- vue-google-signin-button - 导入谷歌登录按钮
- vue-svgicon - 创建svg图标组件的工具
- vue-float-label - VueJS浮动标签模式
- vue-baidu-map - 基于 Vue 2的百度地图组件库
- vue-social-sharing - 社交分享组件
- vue2-editor - HTML编辑器
- vue-tagsinput - 基于VueJS的标签组件
- vue-easy-slider - Vue 2.x的滑块组件
- datepicker - 基于flatpickr的时间选择组件
- vue-chart - 强大的高速的vue图表解析
- vue-music-master - vue手机端网页音乐播放器
- handsontable - 网页表格组件
- vue-simplemde - VueJS的Markdown编辑器组件
- vue-popup-mixin - 用于管理弹出框的遮盖层
- cubeex - 包含一套完整的移动UI
- vue-fullcalendar - vue FullCalendar封装
- vue-material-design - Vue MD风格组件
- vue-morris - Vuejs组件封装Morrisjs库
- we-vue - Vue2及weui1开发的组件
- vue-image-clip - 基于vue的图像剪辑组件
- vue-bootstrap-table - 可排序可检索的表格
- vue-radial-progress - Vue.js放射性进度条组件
- vue-slick - 实现流畅轮播框的vue组件
- vue-pull-to-refresh - Vue2的上拉下拉
- vue-form-2 - 全面的HTML表单管理的解决方案
- vue-side-nav - 响应式的侧边导航
- mint-indicator - VueJS移动加载指示器插件
- chartjs - Vue Bulma的chartjs组件
- vue-scroll - vue滚动
- vue-ripple - 制作谷歌MD风格涟漪效果的Vue组件
- vue-touch-keyboard - VueJS虚拟键盘组件
- vue-chartkick - VueJS一行代码实现优美图表
- vue-ztree - 用 vue 写的树层级组件
- vue-m-carousel - vue 移动端轮播组件
- vue-datepicker-simple - 基于vue的日期选择器
- vue-tabs - 多tab页轻型框架
- vue-verify-pop - 带气泡提示的vue校验插件
- vue-parallax - 整洁的视觉效果
- vue-img-loader - 图片加载UI组件
- vue-typewriter - vue组件类型
- vue-smoothscroll - smoothscroll的VueJS版本
- vue-city - 城市选择器
- vue-tree - vue树视图组件
- vue-ios-alertview - iOS7+ 风格的alertview服务
- dd-vue-component - 订单来了的公共组件库
- paco-ui-vue - PACOUI的vue组件
- vue-cmap - Vue China map可视化组件
- vue-button - Vue按钮组件
开发框架
- vue.js - 流行的轻量高效的前端组件化方案
- vue-admin - Vue管理面板框架
- electron-vue - Electron及VueJS快速启动样板
- vue-2.0-boilerplate - Vue2单页应用样板
- vue-spa-template - 前后端分离后的单页应用开发
- Framework7-Vue - VueJS与Framework7结合
- vue-bulma - 轻量级高性能MVVM Admin UI框架
- vue-webgulp - 仿VueJS Vue loader示例
- vue-element-starter - vue启动页
实用库
- vuex - 专为 Vue.js 应用程序开发的状态管理模式
- vuelidate - 简单轻量级的基于模块的Vue.js验证
- qingcheng - qingcheng主题
- vue-desktop - 创建管理面板网站的UI库
- vue-meta - 管理app的meta信息
- vue-axios - 将axios整合到VueJS的封装
- vue-svg-icon - vue2的可变彩色svg图标方案
- avoriaz - VueJS测试实用工具库
- vue-framework7 - 结合VueJS使用的Framework7组件
- vue-bootstrap-modal - vue的Bootstrap样式组件
- vuep - 用实时编辑和预览来渲染Vue组件
- vue-online - reactive的在线和离线组件
- vue-lazy-render - 用于Vue组件的延迟渲染
- vue-password-strength-meter - 交互式密码强度计
- element-admin - 支持 vuecli 的 Element UI 的后台模板
- vue-electron - 将选择的API封装到Vue对象中的插件
- cleave - 基于cleave.js的Cleave组件
- vue-events - 简化事件的VueJS插件
- vue-shortkey - 应用于Vue.js的Vue-ShortKey 插件
- vue-cordova - Cordova的VueJS插件
- vue-router-transition - 页面过渡插件
- vue-gesture - VueJS的手势事件插件
- http-vue-loader - 从html及js环境加载vue文件
- vue-qart - 用于qartjs的Vue2指令
- vuemit - 处理VueJS事件
- vue-websocket - VueJS的Websocket插件
- vue-local-storage - 具有类型支持的Vuejs本地储存插件
- lazy-vue - 懒加载图片
- vue-bus - VueJS的事件总线
- vue-reactive-storage - vue插件的Reactive层
- vue-notifications - 非阻塞通知库
- vue-lazy-component - 懒加载组件或者元素的Vue指令
- v-media-query - vue中添加用于配合媒体查询的方法
- vue-observe-visibility - 当元素在页面上可见或隐藏时检测
- vue-ts-loader - 在Vue装载机检查脚本
- vue-pagination-2 - 简单通用的分页组件
- vuex-i18n - 定位插件
- Vue.resize - 检测HTML调整大小事件的vue指令
- vuex-shared-mutations - 分享某种Vuex mutations
- vue-file-base64 - 将文件转换为Base64的vue组件
- modal - Vue Bulma的modal组件
- Famous-Vue - Famous库的vue组件
- leo-vue-validator - 异步的表单验证组件
- Vue-Easy-Validator - 简单的表单验证
- vue-truncate-filter - 截断字符串的VueJS过滤器
- vue-zoombox - 一个高级zoombox
- vue-input-autosize - 基于内容自动调整文本输入的大小
- vue-lazyloadImg - 图片懒加载插件
服务端
- nuxt.js - 用于服务器渲染Vue app的最小化框架
- express-vue - 简单的使用服务器端渲染vue.js
- vue-ssr - 非常简单的VueJS服务器端渲染模板
- vue-ssr - 结合Express使用Vue2服务端渲染
- vue-easy-renderer - Nodejs服务端渲染
辅助工具
- DejaVue - Vuejs可视化及压力测试
- vue-play - 展示Vue组件的最小化框架
- vscode-VueHelper - 目前vscode最好的vue代码提示插件
- vue-generate-component - 轻松生成Vue js组件的CLI工具
- vue-multipage-cli - 简单的多页CLI
- VuejsStarterKit - vuejs starter套件
应用实例
- koel - 基于网络的个人音频流媒体服务
- pagekit - 轻量级的CMS建站系统
- vuedo - 博客平台
- jackblog-vue - 个人博客系统
- vue-cnode - 重写vue版cnode社区
- CMS-of-Blog - 博客内容管理器
- rss-reader - 简单的rss阅读器
- vue-ghpages-blog - 依赖GitHub Pages无需本地生成的静态博客
- swoole-vue-webim - Web版的聊天应用
- vue-dashing-js - nuvo-dashing-js的fork
- fewords - 功能极其简单的笔记本
- vue-blog - 使用Vue2.0 和Vuex的vue-blog
Demo示例
- Vue-cnodejs - 基于vue重写Cnodejs.org的webapp
- NeteaseCloudWebApp - 高仿网易云音乐的webapp
- vue-zhihu-daily - 知乎日报 with Vuejs
- vue-wechat - vue.js开发微信app界面
- vue2-demo - 从零构建vue2 + vue-router + vuex 开发环境
- eleme - 高仿饿了么app商家详情
- vue-demo - vue简易留言板
- maizuo - vue/vuex/redux仿卖座网
- spa-starter-kit - 单页应用启动套件
- vue-music - Vue 音乐搜索播放
- douban - 模仿豆瓣前端
- vue-Meizi - vue最新实战项目
- zhihudaily-vue - 知乎日报web版
- vue-demo-kugou - vuejs仿写酷狗音乐webapp
- VueDemo_Sell_Eleme - Vue2高仿饿了么外卖平台
- vue2.0-taopiaopiao - vue2.0与express构建淘票票页面
- vue-leancloud-blog - 一个前后端完全分离的单页应用
- node-vue-server-webpack - Node.js+Vue.js+webpack快速开发框架
- mi-by-vue - VueJS仿小米官网
- vue-fis3 - 流行开源工具集成demo
- vue2.x-douban - Vue2实现简易豆瓣电影webApp
- vue-demo-maizuo - 使用Vue2全家桶仿制卖座电影
- vue-zhihudaily - 知乎日报 Web 版本
- vue-adminLte-vue-router - vue和adminLte整合应用
- vue-axios-github - 登录拦截登出功能
- Zhihu-Daily-Vue.js - Vuejs单页网页应用
- hello-vue-django - 使用带有Django的vuejs的样板项目
- vue-cnode - vue单页应用demo
- x-blog - 开源的个人blog项目
- vue-express-mongodb - 简单的前后端分离案例
- websocket_chat - 基于vue和websocket的多人在线聊天室
- photoShare - 基于图片分享的社交平台
- vue-zhihudaily-2.0 - 使用Vue2.0+vue-router+vuex创建的zhihudaily
- notepad - 本地存储的记事本
- vueBlog - 前后端分离博客
- vue-ruby-china - VueJS框架搭建的rubychina平台
- Zhihu_Daily - 基于Vue和Nodejs的Web单页应用
- vue-koa-demo - 使用Vue2和Koa1的全栈demo
- vue2.x-Cnode - 基于vue全家桶的Cnode社区
- life-app-vue - 使用vue2完成多功能集合到小webapp
- github-explorer - 寻找最有趣的GitHub库
- vue-trip - vue2做的出行webapp
- vue-ssr-boilerplate - 精简版的ofvue-hackernews-2
- vue-bushishiren - 不是诗人应用
- houtai - 基于vue和Element的后台管理系统
- ios7-vue - 使用vue2.0 vue-router vuex模拟ios7
- Framework7-VueJS - 使用移动框架的示例
- cnode-vue - 基于vue和vue-router构建的cnodejs web网站SPA
- vue-cli-multipage-bootstrap - 将vue官方在线示例整合到组件中
- vue-cnode - 用 Vue 做的 CNode 官网
- HyaReader - 移动友好的阅读器
- zhihu-daily - 轻松查看知乎日报内容
- seeMusic - 跨平台云音乐播放器
- vue-cnode - 使用cNode社区提供的接口
- zhihu-daily-vue - 知乎日报
- sls-vuex2-demo - vuex2商城购物车demo
- vue-dropload - 用以测试下拉加载与简单路由
- vue-cnode-mobile - 搭建cnode社区
- Vuejs-SalePlatform - vuejs搭建的售卖平台demo
- v-notes - 简单美观的记事本
- vue-starter - VueJs项目的简单启动页
vue的组件开发手风琴菜单实例
小图标是引入font-awesome字体图标库绘制的。效果如下图所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
<link rel="stylesheet" href="css/font-awesome.min.css">
<link rel="stylesheet" href="css/index.css">
<script type="text/javascript" src="../lib/vue.min.js"></script>
<script type="text/javascript" src="../lib/jquery-1.11.3.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
body {
padding-top: 100px;
}
#tabPanel {
width: 120px;
height: auto;
margin: 0 auto;
}
#tabPanel .item .sildermun ul li {
height: 40px;
line-height: 40px;
list-style: none;
}
#tabPanel .item .sildermun ul li:hover {
background: #ccc;
}
#tabPanel .item .menutitle {
height: 40px;
line-height: 40px;
text-align: center;
background: #ccc;
}
#tabPanel .item .sildermun {
text-align: center;
background: #eee;
}
</style>
</head>
<body>
<div id="tabItem">
<slider-item></slider-item>
<slider-item></slider-item>
<slider-item></slider-item>
<slider-item></slider-item>
</div>
<!--组件模板,也可以使用template标签方式引入模板-->
<template id="tab">
<div id="tabPanel">
<div class="item">
<div class="menutitle" @click="toggle()"><i class="icon-th-list"></i> {{parentItem}}</div>
<div class="sildermun" v-show="status">
<ul>
<li v-for="(index,v) in childItems"><i class="icon-star"></i> {{v+index}}</li>
</ul>
</div>
</div>
</div>
</div>
</template>
<!--组件模板,也可以使用template标签方式引入模板-->
</body>
</html>
<script>
var vue = new Vue({
el: "#tabItem",
data: {
},
components: {
'slider-item': {
template: '#tab',
data: function() {
return {
status: false,
parentItem: "父级菜单",
childItems: ["子级菜单", "子级菜单", "子级菜单", "子级菜单"]
}
},
methods: {
//切换滑块
toggle: function() {
this.status = !this.status;
}
}
}
}
});
</script>