详解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 相关文章推荐
js加载之使用DOM方法动态加载Javascript文件
Nov 08 Javascript
javascript里使用php代码实例
Dec 13 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
基于javascript实现根据身份证号码识别性别和年龄
Jan 22 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
Aug 29 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
详谈表单重复提交的三种情况及解决方法
Aug 16 Javascript
JavaScript设计模式之工厂模式简单实例教程
Jul 03 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
JavaScript运行机制实例分析
Apr 11 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代码审核的详细介绍
2013/06/13 PHP
php开启openssl的方法
2014/05/15 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
python self,cls,decorator的理解
2009/07/13 Python
使用Python获取Linux系统的各种信息
2014/07/10 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python 实现两个线程交替执行
2020/05/02 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
安全教育感言
2014/03/04 职场文书
小学捐书活动总结
2014/07/05 职场文书
上党课的心得体会
2014/09/02 职场文书
颐和园英文导游词
2015/01/30 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
未中标通知书
2015/04/17 职场文书
安全主题班会教案
2015/08/12 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript