Vue项目硅谷外卖(二)

本文详细介绍了Vue中如何动态绑定class和style,包括字符串、对象、数组等多种方式,并展示了如何根据数据变化更新DOM。同时,讲解了Vue的路由跳转方法,结合一个底部导航栏组件`FooterGuide`的实例,阐述了动态切换底部导航项的实现。
摘要由CSDN通过智能技术生成

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'
  }
}

二、路由跳转方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值