视频地址:

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. 开源的Datadog?可观测性平台SigNoz是否名副其实?

    SigNoz号称自己是开源领域的Datadog,基于OpenTelemetry做了一套可观测性方案.夜莺从V6版本开始,也希望做全栈可观测性方案,巧了,大家目标一致,今天我们一起来对SigNoz做个初 ...

  2. c++ win32 纤程

    Win32纤程是一种轻量级的协程机制,它能够在同一个线程中实现多个线程执行的效果,从而提高了程序的并发性和可伸缩性. 在C++中,可以使用Win32 API中的fiber来实现纤程.以下是一个使用纤程 ...

  3. Exception:kylin构建cube, Cannot modify mapReduce.queue.name at runtime

    Failed to open new session: java.lang.IllegalArgumentException: Cannot modify tez.queue.name at runt ...

  4. tempCode

    package com.cmbchina.monitor.service.imp; import com.alibaba.fastjson.JSON; import com.cmbchina.moni ...

  5. ARM Cortex-A系列处理器性能分类比较

    在如今这个电子产品泛滥的年代,仅仅靠品牌或是外观已经不足以辨别产品的优劣,其内置的处理器自然也就成为了分辨产品是否高端的标准之一.那么我们今天就不妨好好了解一下近几年来电子产品中较为主流的RAM处理器 ...

  6. centos如何统计磁盘使用总量,以及cpu使用率

    剩余硬盘容量 T: df | awk '{print $4}' |sed 's/Available//g' |sed '/^\s*$/d' | awk '{sum+=$1} END {print su ...

  7. 深度对比!瑞芯微RK3562J比RK3568J好在哪里?

    作为瑞芯微的明星产品--RK3568J,凭借其出色的性能及丰富的外设接口成为国内众多工业客户的最佳选择. 随着RK3568J的大规模应用,很多客户开始针对RK3568J的价格偏高.功耗偏高等问题提出了 ...

  8. (Java)日志框架体系整理

    # JUL 指的是Java Util Logging包,它是Java原生的日志框架,使用时不需要另外引用第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中.@紫邪情 # JUL的组 ...

  9. 拟合算法与matlab工具包实现

    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点.拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数) 目录 一.插值和拟合的区 ...

  10. css 选择器优先级?

    !important > 行内样式(比重1000)> ID 选择器(比重100) > 类选择器(比重10) > 标签(比重1) > 通配符 > 继承 > 浏览 ...