详解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 相关文章推荐
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
js Math 对象的方法
Sep 01 Javascript
解决JS中乘法的浮点错误的方法
Jan 03 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
JavaScript弹出对话框的三种方式
Mar 23 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
May 27 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
Jun 01 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
jQuery实现checkbox的简单操作
Nov 18 jQuery
基于Proxy的小程序状态管理实现
Jun 14 Javascript
基于vue手写tree插件的那点事儿
Aug 20 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 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
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
推荐文章系统(一)
2006/10/09 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
js 调用百度分享功能
2017/02/27 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
Python程序设计入门(2)变量类型简介
2014/06/16 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
带你认识Django
2019/01/15 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Python print不能立即打印的解决方式
2020/02/19 Python
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
乔迁之喜主持词
2014/03/27 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
详解Python类和对象内容
2021/06/22 Python
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android