FooterGuide:底部导航栏组件,属于非路由组件
FooterGuide.vue
<template>
<div class="footer_guide">
<!-- vue强制动态绑定class、style
class/style绑定就是用来专门实现动态样式效果的技术
2.class绑定 :
class=‘xxx’
xxx是字符串,数组,对象
3.style绑定:
:style=“{color:activeColor,fontSize:fontSize+‘px’}”
其中activeColor,fontSize是data属性
-->
<a href="javascript:;" class="guide-item" :class="{on: '/msite'===$route.path}" @click="goTo('/msite')">
<span class="item_icon">
<i class="iconfont icon-ziyuan"></i>
</span>
<span>外卖</span>
</a>
<a href="javascript:;" class="guide-item" :class="{on: '/search'===$route.path}" @click="goTo('/search')">
<span class="item_icon">
<i class="iconfont icon-sousuo"></i>
</span>
<span>搜索</span>
</a>
<a href="javascript:;" class="guide-item" :class="{on: '/order'===$route.path}" @click="goTo('/order')">
<span class="item_icon">
<i class="iconfont icon-Order"></i>
</span>
<span>订单</span>
</a>
<a href="javascript:;" class="guide-item" :class="{on: '/profile'===$route.path}" @click="goTo('/profile')">
<span class="item_icon">
<i class="iconfont icon-wode"></i>
</span>
<span>我的</span>
</a>
</div>
</template>
<script>
export default {
name: "FooterGuide",
methods: {
goTo(path) {
//$router控制路由进行跳转
this.$router.replace(path);
}
}
}
</script>
<style scoped >
.footer_guide{
position: fixed;
z-index: 100;
left: 0;
right: 0;
bottom: 0;/*放在页面最底部*/
border-bottom: 1px solid #878787;
border-top: 1px solid #878787;
/*flex是给其父元素设置的 设置的是里面的子元素的排列方式*/
display: flex;
width: 100%;
background-color: #fff;
}
.guide-item{
display: flex;
flex:1;
flex-direction: column;
align-items: center;
text-align: center;
font-size: 20px;
}
.item_icon{
display:flex;
height: 80%;
text-align: center;
line-height: 100%;
font-size: 80px;
}
.iconfont{
/*将iconfont图标调大*/
font-size: 40px;
}
@media only screen and (-webkit-device-pixel-ratio: 2) {
::before {
transform: scaleY(0.5);
}
}
@media only screen and (-webkit-device-pixel-ratio: 3) {
::before {
transform: scaleY(0.333333);
}
}
/*点击相应图标 该图标变绿*/
.on{
color: #02a774;
}
</style>
知识点:
一、Vue强制动态绑定class、style
Vue.js 的核心是一个响应的数据绑定系统,它允许我们在普通 HTML 模板中使用特殊的语法将 DOM “绑定”到底层数据。被绑定的DOM 将与数据保持同步,每当数据有改动,相应的DOM视图也会更新。基于这种特性,通过vue.js动态绑定class就变得非常简单。
1.数据绑定
vue 指令以 v- 前缀标示,数据绑定的指令 v-bind:属性名, 简写为 :属性名, 简单的数据绑定例子如下:
<a v-bind:href="http://www.cnblogs.com/">博客园首页</a>
简写:
<a :href="http://www.cnblogs.com/">博客园首页</a>
2.动态绑定class
vue 的分隔符默认是 {{ }}, 在分隔符里面的字符串会被认为是数据变量,可以通过 class="{{ className }}" 方式设置class,但是vue不推荐这种方式与 v-bind:class 的方式混用,二者只能选其一。v-bind:class 虽然与class属性里绑定变量的方式不能共存,却可以与原生的class特性共存, 一个DOM标签中允许同时出现原生class和v-bind:class。
2.1 v-bind:class 支持string类型,不建议这样使用,因为string值是固定不变的,无法实现动态改变class的需求
HTML代码:
<div :class=" 'classA classB' ">Demo1</div>
渲染后的HTML:
<div class="classA classB">Demo1</div>
2.2 v-bind:class 支持数据变量,当变量值改变时,将同时更新class。v-bind:class指令的值限定为绑定表达式,如javascript表达式
HTML代码:
<div :class="classA">Demo2</div>
Javascript代码:
data: {
classA: 'class-a' //当classA改变时将更新class
}
渲染后的HTML:
<div class="class-a">Demo2</div>
2.3 v-bind:class 支持对象,语法:{key(类名) :value(布尔值)},对象改变时会动态更新class
HTML代码:
<div :class="{ 'class-a': isA, 'class-b': isB}">Demo4</div>
Javascript代码:
data: {
isA: false, //当isA改变时,将更新class
isB: true //当isB改变时,将更新class
}
渲染后的HTML:
<div class="class-b">Demo4</div>
HTML代码:
<div :class="objectClass">Demo5</div>
Javascript代码:
data: {
objectClass: {
class-a: true,
class-b: false
}
}
渲染后的HTML:
<div class="class-a">Demo5</div>
2.4: v-bind:class支持数组, 数组里的变量改变时,会动态更新class列表
HTML代码:
<div :class="[classA, classB]">Demo6</div>
Javascript代码:
data: {
classA: 'class-a',
classB: 'class-b'
}
渲染后的HTML:
<div class="class-a class-b">Demo6</div>
数组中可以包含object类型,数组中的object对象改变,也会更新class列表
HTML代码:
<div :class="[classA, objectClass]">Demo7</div>
Javascript代码:
data: {
classA: 'class-a',
objectClass: {
classB: 'class-b', // classB 的值为class-b, 则将classB的值添加到class列表
classC: false, // classC值为false,将不添加classC
classD: true // classD 值为true,classC将被直接添加到class列表
}
}
渲染后的HTML:
<div class="class-a class-b classD">Demo7</div>
绑定数组有两种方式,一种是直接绑定类名,还有一种是绑定三元运算符。
3.动态绑定Style : 也可以通过对象语法和数组语法进行动态绑定
- 对象语法:其中activeColor/fontSize是data属性
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
activeColor: 'red',
fontSize: 30
}
- 数组语法:
<div v-bind:style="[styleColor, styleSize]"></div>
data: {
styleColor: {
color: 'red'
},
styleSize:{
fontSize:'23px'
}
}