上一篇写了一下table,然后要写什么呢?当然是tab了。动态创建一个tab,里面放一个table,这样一个后台管理的基本功能(之一)就出来了。

  好吧,这里其实只是试试水,感受一下vue的数据驱动可以怎么玩,通过一个个实例学习一下vue的各个知识点。这里要看看方法和css如何设置。

一、目标

1、  可以动态创建tab。

2、  可以切换(废话)、可以关闭tab。

3、  Css的设置。

4、  方法的处理方式。

5、  效果图

二、思路

  应该有好多种方式可以实现,这里先试一个,其他的以后再说。

  还是数据驱动,那么就建立一个大的数据包,把tab信息和table信息都放进去,然后绑定就好了。似乎不是太难的样子。Emmmmmm大概是吧。

  Tab切换,暂时使用css的方式来控制。

  关闭tab,就是干掉对应的数据。

三、设计与编码

1.    数据包

var tab = new Vue({
el: '#tab',
data: {
tabNumber: 1, //标签数量,这个是临时的,便于自动重新绑定
currentTabId: 1, //当前激活的tab的id
beforeTabId: 1, //上一个被激活的tab的id
tabs: {
tab1: { //可以有多个标签,这里先默认一个tab
id: "1", //标签识别标示
title: "我的桌面",
isShow:true, //是否显示
message: '桌面',
orderBy: [], //可以控制字段的先后顺序,想调整列的先后顺序,改这个数组就行,可以做个性化设置
tableTh: {}, //表头的描述信息
dataList: [] //数据包,字段名作为关键字,便于列的调整先后顺序
}
}
},
methods: {
tabClick: function (id) {
//切换tab
//alert("切换tab" + id);
//隐藏当前的tab
var oldId = tab.currentTabId; //记录切换前tab的id
tab.beforeTabId = oldId;
tab.tabs["tab" + oldId].isShow = false; //隐藏切换前的tab tab.currentTabId = id; //记录切换后的id
tab.tabs["tab" + id].isShow = true; //显示切换后的tab },
closeTab: function (id) {
if (id === "1") {
alert("这是桌面,建议不要关闭哦:)");
return;
} delete tab.tabs["tab" + id]; //这种方式不会被vue监控到,所以不会触发视图的刷新
tab.tabNumber = tab.tabNumber - 1; //这样子凑合一下。触发视图的刷新 //设置“激活”状态
var oldId = tab.beforeTabId; //上一个激活tab
var nowId = tab.currentTabId; //现在激活tab if (nowId === id) {
//关掉的是激活tab,需要设置上一个tab为激活状态
tab.currentTabId = oldId;
tab.tabs["tab" + oldId].isShow = true; //这么写好像可以触发视图的刷新
tab.beforeTabId = 1;
}
else if (oldId === id) {
//关闭的是上一个激活tab,修改前一个tab的id
tab.beforeTabId = 1; }else {
//需要强制修改一下,否则不会刷新,emmm,好吧还是没自动刷新
tab.currentTabId = nowId;
}
}
}
});

  methods 这个也是一个保留字(关键字),就是放方法的。里面可以有多个方法,方法名称和标签里的v-on:XXXX=’00000’ 对应。

  这里写了两个方法,一个是切换tab的,一个是关闭tab的。

  切换tab:按照数据驱动视图的思路,在方法里面改变数据的isShow 属性值,然后通过模板的设置来实现切换效果。

  关闭tab:干掉对应的数据即可,只是实现的时候遇到点小问题,delele的方式不能被监控,到时视图不能及时更新,所以加了一个tab数量的属性,关掉一个tab,数量-1,这样数据变化就可以被监控到了,然后一起重新绑定。

2.    模板

<div id="tab">
<!--tab标签-->
<ul id="ulTab" class="tabs left">
<li v-for="t in tabs" v-bind:class="{'selectTag':t.isShow}">
<a v-on:click="tabClick(t.id)" href="javascript:void(0)"> {{t.title}}&nbsp;
<em class="arrup" v-on:click.stop="closeTab(t.id)">x</em>
</a>
</li>
</ul> <div v-for="t in tabs" v-show="t.isShow">
{{ t.message }}{{tabNumber}}
<table class="table_default1" style="" v-show="t.message!=='桌面'">
<tr>
<th>序号</th>
<th v-for="key in t.orderBy">
{{t.tableTh[key].title}}
</th>
</tr>
<tr v-for="(tr,i) in t.dataList">
<td>{{i+1}}</td>
<td v-for="index in t.orderBy" v-bind:align="t.tableTh[index].align">
{{tr[index]}}
</td> </tr>
</table>
</div>
</div>

切换tab

  用v-show的方法来控制div是否显示。

  v-show是通过修改style的属性来实现的。

  用v-bind:class="{'selectTag':t.isShow}" 的方式来实现tab的激活效果。

  v-bind:class 可以绑定css名称。因为css名称总是要被换来换去的,所以vue就很贴心的提供了这种if true 才设置的方式,冒号后面为真,才会设置设个css名称,这样数据驱动的时候就方便多了。

四、运行效果

  调试了半天,好吧上年纪了,思维不够敏捷,这么点逻辑问题就卡住了,哎。

  不过最后还是调试成功了。

五、总结

  这个有一个明显的问题,这个数据包是不是有点大,创建的tab越多,数据包就越大,有没有性能问题?会不会卡?

  另外这还只是table,如果增加了按钮、查询条件、分页控件,这个数据包的结构要变成多复杂呀?挖坑也不带这么挖的呀。

  那么怎么办呢?下次再说。(好吧,现在还没想好,似乎要写组件,或者要用到插槽)

下集预告:会做一个tree,增加访问后端获得数据,然后绑定数的方法。

从后端到前端之Vue(二)写个tab试试水的更多相关文章

  1. 从后端到前端之Vue(一)写个表格试试水

    目录: 1.脚本式开发. 2.工程化开发 3.工程化和脚本的区别 4.来个table试试水 4,1.目标 4.2.思路 4.3.设计与编码 4.4.效果 5.业务分离 6.功能拓展——个性化设置    ...

  2. 从后端到前端之Vue(三)小结以及一颗真实的大树

    上一篇写了一下tab,下面整理一下用过的知识点,本想按照官网的文档,整理一下可以更清晰,结果也许是我的方法不对吧,总之更模糊了. 按照官网文档的顺序整理到了表单输入绑定之前,因为之前大致也就只涉及到这 ...

  3. 从后端到前端之Vue(四)小试牛刀——真实项目的应用(树、tab、数据列表和分页)

    学以致用嘛,学了这么多,在真实项目里面怎么应用呢?带着问题去学习才是最快的学习方式.还是以前的那个项目,前后端分离,现在把前端换成vue的,暂时采用脚本化的方式,然后在尝试工程化的方式. 现在先实现功 ...

  4. 从后端到前端之Vue(六)表单组件

    表单组件 做项目的时候会遇到一个比较头疼的问题,一个大表单里面有好多控件,一个一个做设置太麻烦,更头疼的是,需求还总在变化,一会多选.一会单选.一会下拉的,变来变去的烦死宝宝了. 那么怎么解决这个问题 ...

  5. 从后端到前端之Vue(五)小试路由

    一开始我还以为vue的路由只能用在工程化的项目里面呢,然后研究了一下才发现,在脚本化里面也是可以用的.其实呢不管在哪里用,把原理研究明白就对了. 一. 官网demo 这里不得不吐槽一下官网,写的不清不 ...

  6. 写给后端的前端笔记:浮动(float)布局

    写给后端的前端笔记:浮动(float)布局 这篇文章主要面向后端人员,对前端有深刻了解的各位不喜勿喷. 起因 前一阵子我一个后端的伙伴问我,"前端的左飘怎么做?",我立马就懵了,& ...

  7. 写给后端的前端笔记:定位(position)

    写给后端的前端笔记:定位(position) 既然都写了一篇浮动布局,干脆把定位(position)也写了,这样后端基本上能学会css布局了. 类别 我们所说的定位position主要有三类:固定定位 ...

  8. 循序渐进VUE+Element 前端应用开发(19)--- 后端查询接口和Vue前端的整合

    循序渐进VUE+Element 前端应用开发的系列文章中,前面介绍了系统各个功能的处理实现,本篇随笔从一个主线上介绍前后端开发的整合,让我们从ABP框架后端的查询接口的处理,前端API接口调用的封装, ...

  9. 0基础菜鸟学前端之Vue.js

    简介:0基础前端菜鸟,啃了将近半月前端VUE框架,对前端知识有了初步的了解.下面总结一下这段时间的学习心得. 文章结构 前端基础 Vue.js简介 Vue.js常用指令 Vue.js组件 Vue.js ...

随机推荐

  1. linq中不能准确按拼音排序

    在LinqToObject中,利用OrderBy/OrderByDescending, ThenBy/ThenByDescending这4个方法排序时,发现不能正确的按拼音排序,所以在排序时增加编码支 ...

  2. 零元学Expression Blend 4 - Chapter 19 如何让做好的Blend专案变Silverlight网页

    原文:零元学Expression Blend 4 - Chapter 19 如何让做好的Blend专案变Silverlight网页 本章将教大家如何把制作好的Blend专案变为可以让任何人在网际网路浏 ...

  3. vmstat命令浅析

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  4. 逻辑回归模型(Logistic Regression)及Python实现

    逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳 ...

  5. 使用 Elastic Stack 来监控和调优 Golang 应用程序

    Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来 ...

  6. 21 步助你成为成功的 Web 开发者(激情不是被动的:它是一种对行动起来的追求)

    随着 Web 开发产业的爆发式发展,许多人会问这样的问题:我如何才能成为一名 Web 开发者?我认为这是一个错误的提问.问题应该是:我如何才能成为一名成功的 Web 开发者? 能提出这样的问题很重要, ...

  7. 可视化文件消息收发一体化Socket实现V0.1

    http://blog.csdn.net/laoyang360/article/details/8681918

  8. WCF研究-中篇

    中篇 5.托管于宿主 6.消息模式 7.WCF行为-实例管理和并发控制 8.安全 5.托管于宿主 托管 宿主Host Ø承载WCF Service运行的环境 自承载方式 系统服务方式 IIS方式 WA ...

  9. Awesome C/C++(图像部分)

    GUI Graphic User Interface CEGUI - Flexible, cross-platform GUI library. FLTK - Fast, light, cross-p ...

  10. 使用Arcgis Pro 发布矢量切片

    ArcGIS Pro 中的任何地图或底图都可以创建矢量切片,但是有一些局限性和特殊注意事项.为创建矢量切片制作地图的重点是构建一个有效的地图,以快速绘制生成的切片. 软件环境 操作系统:Windows ...