VUE—linkActiveClass 动态配置active class

VUE—linkActiveClass 动态配置active class,第1张

一.在点击导航栏的时候,让被点击的那一个有背景色,其他的没有背景色?

这样<router-link>被点击激活的时候就会被加上is-active这个class了。注意如果没有设置router-link的标签类型,会是<a>标签,<a>标签是没有宽度和高度的。将router-link 这样的a标签转化为li标签

二.自己来 *** 控 active Class 给加的位置,并不想它随着路由的改变而改变

假如侧边栏我的钱包,路由为'/myWallet',在'/myWallet'页面可以 *** 作提现,会进入'/withdraw'提现页面,路由发生变化,从'/myWallet' 身上移到'/withdraw'上了。如何让 '/myWallet' 这个页面的active Class 保留住呢?给'/withdraw' 加上一个路由元信息,在侧边栏去检查路由元信息,然后看是否需要给其active class

如果只有一个页面 对应一个active的,就不用添加 meta下面的active属性了

1.dom结构

<div class="liveInDetailList">

<div class="liveInDetail" v-for="(item,index) inPersonNamelist.guestList" :key="index">

<div class="infoDetail">

<span class="left">住客姓名</span>

<input type="text" placeholder="请输入姓名" class="searchRoomInp" autofocus="autofocus" v-model="item.name" ref="inputName" v-focus>

</div>

<div class="infoDetail">

<span class="left" >手机号</span>

      <input type="text" placeholder="请输入手机号" class="searchRoomInp" v-model="item.mobilePhone" >

</div>

<div class="infoDetail">

<span class="left">身份z号</span>

<input type="text" placeholder="请输入身份z号" class="searchRoomInp" v-model="item.idCardNo">

</div>

<div class="handle" v-if="isShowDelete">

</div>

<div class="handle" v-else>

<i slot='rightIcon' class="iconfont icon-icon-shanchu deleterightIcon"  @click.stop="delRoomCard(index)"></i>

</div>

</div>

</div>

2在data中定义

PersonNamelist:{

checkInRoomId:'',

guestList:[{id:"",name:"",mobilePhone:"",idCardNo:""}]

},

3.点击新增

   1.定义一个obj

let obj={

id:"",

name:"",

mobilePhone:"",

idCardNo:""

}

2.点击一下将obj添加进数组PersonNamelist

4.该项目会从后台传来一个新增最多的人数所以需要判断下PersonNamelist中的guestList的长度

addPerson(){

let obj={

id:"",

name:"",

mobilePhone:"",

idCardNo:""

  }

if(this.PersonNamelist.guestList.length<(后台数据))

this.PersonNamelist.guestList.push(obj)

}

else{

Toast({

message:'已超出该房间可住最大人数',

position:'bottom',

duration:1000,

className:'panduan'

    })

}

}

*** 作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。

vue官方文档对于class和style绑定有两种方法,对象语法和数组语法。

1.绑定 HTML Class对象绑定

我们用传给v-bind:class 一个对象,动态切换class 是否存在

<div v-bind:class="{ active: isActive }"></div>//这里我们使用isActive 这个变量动态判断active是否显示到html

vue对象里面

data: {

isActive:true,//判断是否显示active这个class

}

页面渲染为:

<div class="active"></div>

当然我们也可以对象中传入更多属性来动态切换多个 class,此外,v-bind:class 指令也可以与普通的 class 属性共存。

<div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }">  动态切换多个 class</div>

vue对象里面

data: {

isActive:true,

hasError:false

}

页面渲染为:

<div class="static active">  动态切换多个 class</div>

对于上面v-bind:class 指令我们也可以传一个对象

<div v-bind:class="classObject">动态切换多个 class</div>

data: {

  classObject: {

    active: true,

    'text-danger': false

  }

}

页面渲染为:

<div class="active">  动态切换多个 class</div>

对于动态class绑定我们也可以通过计算属性返回对象来动态判断class的绑定值

<div v-bind:class="classObject"></div>

data: {

  isActive: true,

  error: null

},

computed: {

  classObject: function () {

    return {

      active: this.isActive &&!this.error,

      'text-danger': this.error &&this.error.type === 'fatal'

    }

  }

}

2.绑定 HTML Class数组语法

除了对象语法绑定class,我们还有一种方法是数组语法,我们可以把一个数组传给 v-bind:class。

<div v-bind:class="[activeClass, errorClass]"></div>

data: {

  activeClass: 'active',

  errorClass: 'text-danger'

}

页面渲染为

<div class="active text-danger"></div>

我们也可以通过三元表达式来进行判断切换class:

<div v-bind:class="[isActive ? activeClass : ' ', errorClass]"></div>  //这里判断是如果isActive 为true显示activeClass ,errorClass,否则只显示errorClass

对于class绑定当有多个条件 class 时这样写有些繁琐,在数组语法中也可以使用对象语法。

<div v-bind:class="[{ active: isActive }, errorClass]"></div>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11664234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存