当前位置: 首页 > Web前端 > vue.js

Vue动态组件应用场景讲解——以tab切换效果为例

时间:2023-04-01 12:24:14 vue.js

问题描述在开发中经常会用到tab切换场景。当我们需要实现这种效果的时候,往往会想到以下几种方式来实现这种效果。方法一使用display:none;控制dom元素的显示和隐藏。这样就实现了两个tab的显示和隐藏。但是,如果有三四个选项卡需要切换,这种方法不可取。方法二在vue中使用命令v-if或者v-show来实现。这个方法可以实现,但是代码写的不太优雅。试想一下,一个.vue文件中出现大量的v-if是什么效果?而使用v-if必须要声明很多变量以供识别。所以这不是一个很好的解决方案。方法三在iview中使用elementui或tab切换组件。这个方法也可以,就是有时候需要/deep/改变样式,有点麻烦。笔者相信使用vue的动态组件来实现tabs的切换效果会更加方便。vue的动态组件是什么?vue的动态组件本质上就是一个组件。一般来说,一个组件就是一个带有js逻辑的UI视图层。所谓动态组件,就是我们可以根据某些条件,动态地控制那个组件在页面某部分的具体显示。这有点像标签切换。应用场景描述需求效果图其实很简单,就是tab切换的效果。当然,在实际开发中,tab的样式效果可能会稍微复杂一点。实现步骤第一步(新建组件,导入注册)首先在components文件夹下定义四个.vue文件,作为tab切换呈现的内容部分,导入后即可使用。新建导入并注册从“./components/one”导入一个;从“./components/two”导入两个;从“./components/three”导入三个;从“./components/four”导入四个;components:{one,two,three,four,},第二步(布局,把tab点击的label放在最上面,下面放component渲染对应的内容)第三步(写上上面的tab,点击标签)//首先我们在data中定义数组cardArr,用来存放点击的tab的数据data(){return{whichIndex:0,cardArr:[{componentName:"动态组件1",},{componentName:"动态组件2",},{componentName:"动态组件3",},{componentName:"动态组件4"",},],};},//然后使用v-for循环渲染//因为有需要是高亮状态,所以一开始我们默认让index0为第一个高亮,利用data中定义的whichIndex和:class来实现//highlightstyle.highLight{box-shadow:015px30pxrgba(0,0,0,0.2);转换:translate3d(0,-1px,0);}Step4(使用动态组件标签)//动态组件标签有一个is属性,is的值可以被渲染。//这里我们先用一个变量componentId保存起来,谁的componentId就被渲染

//让我们默认让第一个先呈现,同时我们需要匹配cardList中的组件名称和组件id,//所以数据要这样修改data(){return{whichIndex:0,componentId:"one",//值为我们在components对象中注册的导入组件的名称cardArr:[{componentName:"Dynamiccomponentone",componentId:"one",//对应到it},{componentName:"动态组件二",componentId:"二",//对应它},{componentName:"动态组件三",componentId:"三",//对应它},{componentName:"动态组件四",componentId:"四",//对应一下},],};}、第五步(点击一个tab组件,动态改变对应的componentId值)完整代码附上#app{width:100%;高度:100vh;框大小:边框框;填充:50px;.top{宽度:100%;高度:80px;显示:弹性;证明内容:空间周围;.crad{宽度:20%;高度:80px;行高:80px;文本对齐:居中;背景色:#fff;边框:1px实心#e9e9e9;}.highLight{box-shadow:015px30pxrgba(0,0,0,0.2);转换:translate3d(0,-1px,0);}}.bottom{米argin-top:20px;宽度:100%;高度:计算(100%-100px);边框:3px纯粉色;显示:弹性;证明内容:居中;业务中,灵活运用动态组件,这样写出来的代码风格还是比较优雅的,生活不易,大家一起努力