详解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学习笔记(一) js基本语法
Oct 25 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
js onkeypress与onkeydown 事件区别详细说明
Dec 13 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
Jun 26 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
JavaScript实现256色转灰度图
Feb 22 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 Javascript
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
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的控制语句
2006/10/09 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
Python类的继承用法示例
2019/01/31 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
如何在Python对Excel进行读取
2020/06/04 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
快速了解Python开发环境Spyder
2020/06/29 Python
python logging模块的使用
2020/09/07 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
大学生职业生涯规划书范文
2014/01/14 职场文书
中学教师师德承诺书
2014/05/23 职场文书
生日宴会策划方案
2014/06/03 职场文书
客户经理岗位职责
2015/01/31 职场文书
mysql数据库隔离级别详解
2022/06/16 MySQL