详解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 相关文章推荐
jQuery 连续列表实现代码
Dec 21 Javascript
js操作ajax返回的json的注意问题!
Feb 23 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
May 21 Javascript
详解react native页面间传递数据的几种方式
Nov 07 Javascript
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
小程序中的箭头函数的具体使用
Jun 19 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读写文件的方法(生成HTML)
2006/11/27 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
PHP Socket 编程
2010/04/09 PHP
php实现的简单检验登陆类
2015/06/18 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
js字符编码函数区别分析
2008/06/05 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
Python数据结构之翻转链表
2017/02/25 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
学生处主任岗位职责
2013/12/01 职场文书
工作失误检讨书范文大全
2014/01/13 职场文书
学年末自我鉴定
2014/01/21 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
合作经营协议书
2014/04/17 职场文书
希特勒的演讲稿
2014/05/23 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
开业典礼致辞
2015/07/29 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫