详解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 相关文章推荐
利用谷歌地图API获取点与点的距离的js代码
Oct 11 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
Dec 12 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
Dec 08 Javascript
Node.js实现文件上传
Jul 05 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
Vue2.0实现组件数据的双向绑定问题
Mar 06 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
Aug 14 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php 过滤器实现代码
2010/08/09 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
多个应用共存的Django配置方法
2018/05/30 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python构造IP报文实例
2020/05/05 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
秸秆管理实施方案
2014/03/15 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2014年少先队工作总结
2014/12/03 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
python 实现德洛内三角剖分的操作
2021/04/22 Python
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
idea下配置tomcat避坑详解
2022/04/12 Servers
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技