详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)


Posted in Javascript onAugust 30, 2017

在 vue 中,实现 Tab 切换主要有三种方式:使用动态组件,使用 vue-router 路由,使用第三方插件。

因为这次完成的功能只是简单切换组件,再则觉得使用路由切换需要改变地址略微麻烦,所以使用的是动态组件实现,如果是在大型应用上,可能使用 vue-router 会方便一些。

先看下最终实现的效果,结构比较简单,顶部的三个 Tab 标签用于切换,内容区域分别为三个子组件。

详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)

效果预览

关键代码及分析如下:

<template>
// 每一个 tab 绑定了一个点击事件,传入的参数对应着 tab 下的组件名
<div class="tabs">
 <div class="tab" @click="toggleTab('prince')"><a>小王子</a></div>
 <div class="tab" @click="toggleTab('rose')"><a>小玫瑰</a></div>
 <div class="tab" @click="toggleTab('fox')"><a>小狐狸</a></div>
</div>
// 子组件,显示不同的 tab
// is 特性动态绑定子组件
// keep-alive 将切换出去的组件保留在内存中
<prince :is="currentTab" keep-alive></prince>
</template>

<script>
// 引入子组件
import prince from './components/prince';
import rose from './components/rose';
import fox from './components/fox';
export default {
 name: 'app',
 data () {
  return {
   currentTab: 'prince' // currentTab 用于标识当前触发的子组件
  };
 },
 components: { // 声明子组件
  prince,
  rose,
  fox
 },
 methods: {
  toggleTab: function(tab) {
   this.currentTab = tab; // tab 为当前触发标签页的组件名
  }
 }
}
</script>

使用动态组件实现 Tab 标签页切换的基本过程可以概括为:

  • 在父组件中定义一个主 tab 标签页,用于切换,同时为每个 tab 绑定点击事件,传入该 tab 的子组件名,最后引入并定义子组件
  • 子组件中是各 tab 标签页的内容
  • 使用 is 特性动态切换子组件,使用 kee-alive 缓存

is 特性一般用于原生 HTML 元素扩展

举个栗子,一般在 ul 标签中只能嵌套 li 标签,但是我们现在想在 ul 标签内使用自定义组件 v-li。

<ul>
  <v-li></v-li>
</ul>

而这样写肯定是不行的,这就需要用到 is 特性了。

<ul>
  <li is="v-li"></li>
</ul>

这也就是为什么利用 is 特性可以实现动态切换组件的效果。

keep-alive 指令可以将切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JSON 学习之JSON in JavaScript详细使用说明
Feb 23 Javascript
表单序列化与jq中的serialize使用示例
Feb 21 Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
AngularJs动态加载模块和依赖注入详解
Jan 11 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
浅谈angular4生命周期钩子
Sep 05 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
javascript实现自由编辑图片代码详解
Jun 21 Javascript
微信小程序使用车牌号输入法的示例代码
Aug 20 Javascript
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
angular4 如何在全局设置路由跳转动画的方法
Aug 30 #Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
Aug 30 #Javascript
如何理解Vue的render函数的具体用法
Aug 30 #Javascript
微信小程序之发送短信倒计时功能
Aug 30 #Javascript
使用node.js对音视频文件加密的实例代码
Aug 30 #Javascript
hammer.js实现图片手势放大效果
Aug 29 #Javascript
js禁止表单重复提交
Aug 29 #Javascript
You might like
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
python对数组进行反转的方法
2015/05/20 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python pycharm的安装及其使用
2019/10/11 Python
python实现对变位词的判断方法
2020/04/05 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
公务员培训自我鉴定
2013/09/19 职场文书
外联部演讲稿
2014/05/24 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
数学教师个人总结
2015/02/06 职场文书
MySQL深分页问题解决思路
2022/12/24 MySQL