详解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 相关文章推荐
用javascript getComputedStyle获取和设置style的原理
Oct 10 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
Extjs学习笔记之二 初识Extjs之Form
Jan 07 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 Javascript
jQuery中Ajax的get、post等方法详解
Jan 20 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
利用Angularjs和bootstrap实现购物车功能
Aug 31 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
JS库之ParticlesJS使用简介
Sep 12 Javascript
vue之封装多个组件调用同一接口的案例
Aug 11 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
php学习之 认清变量的作用范围
2010/01/26 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
ext读取两种结构的xml的代码
2008/11/05 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
理论讲解python多进程并发编程
2018/02/09 Python
使用python生成目录树
2018/03/29 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python request使用方法及问题总结
2020/04/26 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
计算机应用与科学个人的自我评价
2013/11/15 职场文书
留学推荐信写作指南
2014/01/25 职场文书
民族团结先进个人材料
2014/02/05 职场文书
学生党员公开承诺书
2014/05/28 职场文书
领导班子对照检查材料
2014/09/22 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
2015年共青团工作总结
2015/05/15 职场文书
行政处罚听证告知书
2015/07/01 职场文书
厉行节约工作总结
2015/08/12 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
灵能百分百第三季什么时候来?
2022/03/15 日漫