视频地址:

https://www.bilibili.com/video/BV15741177Eh?p=119

common.css

/* 演示案例是base.css */
body {
padding: 0;
margin: 0;
}

四个组件只是写了H1的标题,其他没动:

路由配置:

import Vue from 'vue'
import Router from 'vue-router' Vue.use(Router) const routeList = [
{
path : '',
redirect : '/home'
},
{
path : '/home',
component : () => import('./../views/home/Home')
},
{
path : '/category',
component : () => import('./../views/category/Category')
},
{
path : '/cart',
component : () => import('./../views/cart/Cart')
},
{
path : '/profile',
component : () => import('./../views/profile/Profile')
},
];
const route = new Router({
routes : routeList,
mode : 'history'
}) export default route;

先从App.vue开始导入Bar组件

<template>
<div id="app">
<tab-bar></tab-bar>
<router-view></router-view>

</div>
</template> <script>
import TabBar from './components/tab-bar/Tab-Bar'
;
export default {
name: 'App',
components : {
tabBar : TabBar
}

}
</script> <style>
@import './assets/css/common.css';
</style>

然后Bar组件拆分导入了Item组件

<template>
<div id="tab-bar"> <tab-bar-item path="/home" activeColor="red">
<img src="./../../assets/img/tab-bar/deactive/home.png" alt="home" slot="item-icon">
<img src="./../../assets/img/tab-bar/active/home.png" alt="home2" slot="item-icon-active">
<div slot="item-text">首页</div>
</tab-bar-item> <tab-bar-item path="/category" activeColor="blue">
<img src="./../../assets/img/tab-bar/deactive/category.png" alt="category" slot="item-icon">
<img src="./../../assets/img/tab-bar/active/category.png" alt="category2" slot="item-icon-active">
<div slot="item-text">分类</div>
</tab-bar-item> <tab-bar-item path="/cart" activeColor="orange">
<img src="./../../assets/img/tab-bar/deactive/cart.png" alt="cart" slot="item-icon">
<img src="./../../assets/img/tab-bar/active/cart.png" alt="cart2" slot="item-icon-active">
<div slot="item-text">购物车</div>
</tab-bar-item> <tab-bar-item path="/profile" activeColor="green">
<img src="./../../assets/img/tab-bar/deactive/mine.png" alt="mine" slot="item-icon">
<img src="./../../assets/img/tab-bar/active/mine.png" alt="mine2" slot="item-icon-active">
<div slot="item-text">我的</div>
</tab-bar-item>
</div>
</template> <script>
import TabBarItem from './Tab-Bar-Item';
export default {
name: "tab-bar",
components : {
tabBarItem : TabBarItem
}
}
</script> <style scoped>
#tab-bar {
display: flex;
background-color: #f6f6f6; position: fixed;
left: 0;
right: 0;
bottom: 0; box-shadow: 0px -3px 1px rgba(100, 100, 100, 0.1);
}
.tab-bar-item {
flex: 1;
text-align: center; /* 文本居中 */
height: 49px; /* 高度设置 */
}
.tab-bar-item img {
width: 24px;
height: 24px;
margin-top: 3px;
vertical-align: middle;
}
</style>

再是细分的Item组件:

<template>
<div class="tab-bar-item" @click="itemClick" > <div v-if="!isActive">
<slot name="item-icon"></slot>
</div> <div v-else >
<slot name="item-icon-active"></slot>
</div> <div :style="activeStyle" ><!-- :class="{ active : isActive }" -->
<slot name="item-text"></slot>
</div> </div>
</template> <script>
export default {
name: "Tab-Bar-Item",
props : {
path : String,
activeColor : {
type : String,
default : 'red'
}
},
data () {
return {
// isActive : false
}
},
computed : {
isActive () {
// return this.$route.path.indexOf(this.path) > -1;
return this.$route.path.indexOf(this.path) !== -1;
},
activeStyle () {
return this.isActive ? { color : this.activeColor } : {}
}
},
methods : {
itemClick() {
this.$router.replace(this.path);
}
}
}
</script> <style scoped>
/*.active {*/
/* color: @activeColor;*/
/*}*/
</style>

图片位置

演示效果:

【Vue】Re23 组件封装的更多相关文章

  1. Vue 倒计时组件封装

    项目中需要用到倒计时的功能,封装了一个组件. 代码解读: 1:created周期中获取传入参数时间的剩余秒数: this.initSecondsLeft() 并绑定间隔事件 intervalEvent ...

  2. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  3. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  4. seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路

    如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路.本人在写项目中琢磨出来的,感觉挺好用,分享一下. 1.在utils文件夹下添加BusEvent.js 注释已经很 ...

  5. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

  6. vue --》组件的封装 及 参数的传递

    vue组件的定义 ● 组件(Component)是Vue.js最强大的功能之一 ● 组件可以扩展HTML元素,封装可重用代码 ● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能 ...

  7. 循序渐进VUE+Element 前端应用开发(20)--- 使用组件封装简化界面代码

    VUE+Element 前端应用,比较不错的一点就是界面组件化,我们可以根据重用的指导方针,把界面内容拆分为各个不同的组合,每一个模块可以是一个组件,也可以是多个组件的综合体,而且这一个过程非常方便. ...

  8. vue cli3.0 封装组件全局引入js文件并发布到npm

    首先用 vue create创建一个项目 当前的项目目录是这样的: 首先需要创建一个 packages 目录,用来存放组件 然后将 src 目录改为 examples 用作示例 二.修改配置 启动项目 ...

  9. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  10. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

随机推荐

  1. 三大显卡厂商(Intel NVIDIA AMD)产品对硬件解码编码支持程度列表

    三大显卡厂商(Intel NVIDIA AMD)产品对硬件解码编码支持程度列表 以下全部为重庆Debug原创博客园独发,资料收集不易,贵请珍惜,更新日期2023年6月8日 Intel GPU解码编码的 ...

  2. 自动化搭建专属 AI 绘图服务

    通义万相AIGC技术已经比较成熟,结合阿里云的计算和存储产品可以方便的搭建自己专属的 AI 绘图服务.例如<创意加速器:AI 绘画创作>这个解决方案,利用阿里自研的通义万相AIGC技术在  ...

  3. vs code 中开发 .net5 mvc

    asp.net core mvc ------------ 安装vscode-solution-explorer,C# 2个扩展.遇到yes就点yes. 新建一个文件夹:D:\repos\Net5Mv ...

  4. 状态模式(Sate Pattern)

    一.模式动机 状态模式(State Pattern)是一种较为复杂的行为型模式.它用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.当系统中某个对象存在多个状态,这些状态之间可以进行转换, ...

  5. 安卓Camera-HAL显示值与比例

    安卓Camera-HAL显示值与比例 参考:https://blog.csdn.net/wang714818/article/details/78049649?utm_source=blogxgwz4 ...

  6. T3/A40i支持Linux-5.10新内核啦,Docker、Qt、Python统统升级!

    自2021年创龙科技推出全志国产化率100%的T3/A40i工业核心板后,不到两年时间已超过800家工业客户选择创龙科技T3/A40i平台.随着客户产品的不断升级与迭代,部分"能源电力&qu ...

  7. NXP i.MX 6ULL工业核心板规格书( ARM Cortex-A7,主频792MHz)

    1 核心板简介 创龙科技SOM-TLIMX6U是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的低成本工业级核心板,主频792MHz,通过邮票孔连接方式引出Eth ...

  8. 一个简单的html时间显示页面-可做小工具

    代码由 chatgpt3.5 生成,已验证 index.html <!DOCTYPE html> <html> <head> <meta charset=&q ...

  9. debian11安装备忘

    1. 网卡驱动 参考网址:如何安装Debian RTL8821CE驱动? 2. 分辨率 貌似还是有点问题,还要进一步研究一下 参考网址:虚拟机中debian11修改控制台(console)分辨率|li ...

  10. 好消息!数据库管理神器 Navicat 推出免费精简版:Navicat Premium Lite

    前言 好消息,前不久Navicat推出了免费精简版的数据库管理工具Navicat Premium Lite,可用于商业和非商业目的,我们再也不需要付费.找破解版或者找其他免费平替工具了,有需要的同学可 ...