视频地址:

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. 解决Python使用GPU

    在Python中使用GPU进行计算通常涉及到一些特定的库,如NumPy.SciPy的GPU加速版本(如CuPy.PyCUDA等)或深度学习库(如TensorFlow.PyTorch等).这些库能够利用 ...

  2. error pulling image configuration: Get https://eastasia.data.mcr.microsoft.com -- net/http: TLS handshake timeout

    error pulling image configuration: Get https://eastasia.data.mcr.microsoft.com/b29889755b1f4e46b6b44 ...

  3. Vue学习:13.生命周期综合

    0基础如何进入IT行业? 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 方向一:学习路径 明确兴趣和目标:首先确定你对IT领域 ...

  4. springboot拦截器@resource注解注入为null解决方案 拦截适配配置

    springboot拦截器@resource注解注入为null解决方案  拦截适配配置 为什么@resource注入为nullinteceptor在springcontext之前加载,注入必然是nul ...

  5. Flink状态(一)

    key状态和算子状态 key状态 key状态总是与key有关,只能被用于keyedStream类型的函数与算子.你可以认为key状态是一种被分区的算子状态,每一个key有一个状态分区.每一个key状态 ...

  6. MAC10.12Caps Lock失灵

    先说一下小弟的MAC系统是黑苹果来的,笔记本并没有那个显示大小写的指示灯,所以一开始的时候一直以为自己的键盘坏了还特意换了一个(结果质量比原来的更差),输入密码因为有大小写经常被提示密码错误所以蛋疼得 ...

  7. opc da 服务器数据 转 profinet IO项目案例

    1         案例说明 1.   在OPC DA服务器上运行OPC DA client软件查看OPC DA服务器的相关参数. 2.   配置VFBOX网关参数,使用网关采集OPC DA服务器数据 ...

  8. shell 根据 指定列 进行 去除 重复行

    根据指定列进行去除重复行 这里的重复是指如果两行的某一列数据相同,则认为是重复数据. 例如:第1行与第2行数据,其中的第2列(以- 作为分隔符)明显是重复的. 100069 - ARM Compile ...

  9. (转载)linux命令英文缩写的含义(方便记忆)

    linux常用命令的英文单词缩写 命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat packa ...

  10. 复习-jQuery

    咱就是说,发现了一个更好的方法每次把效果图制作成了一个gif,另外推荐个免费软件GIFcam很方便制作gif图,毕竟js是一门动态交互的语言对吧,没有动态的图那就是没有灵魂的所以以后就用这种方式来上传 ...