详解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 UI的拖拽功能实现方法小结
Mar 14 Javascript
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
vue项目中api接口管理总结
Apr 20 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 Javascript
记一次vue去除#问题处理经过小结
Jan 24 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
JavaScript的变量声明与声明提前用法实例分析
Nov 26 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 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/10/09 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
详解vue后台系统登录态管理
2019/04/02 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
使用python实现链表操作
2018/01/26 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
python协程之动态添加任务的方法
2019/02/19 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
论文诚信承诺书
2014/05/23 职场文书
党性心得体会
2014/09/03 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS