vue如何获取class的值
vue能动态改变class的值么
<template>
<div ref="div" v-bind:class="['div', 1]">{{ result }}</div>
</template>
<script setup>
import { ref } from 'vue'
const result = ref()
const div = ref()
result.value = div.value.className
</script>
<style scoped>
</style>
这样运行结果报错
<template>
<div v-for="(item, index) in array" :key="index" ref="div" v-bind:class="['div', item]"></div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
const array = ref([])
const div = ref()
onMounted(() => {
for (let i = 0; i < 10; i++) {
array.value.push(i)
}
})
</script>
<style scoped>
</style>
这么写能实现动态切换class么
首先,我告诉你为什么报错
在我的电脑里报错是取不到undifend的classname属性,你的应该也是一样,也就是说在你的代码中div.value为undifend(要自己学会分析报错信息,以及提问时把报错信息带上来),那么为什么它为undefine?
你的代码逻辑没有问题,但是要注意,setup语法糖本质是把代码包裹在setup函数中,而setup函数隶属于vue的生命周期其中之一(类似于option api中的oncreated),而你在setup函数中直接去获取div.value,此时真实dom并没有被渲染,所以它为undifend,具体解决方法可以看我的文章ref详解,文章最后有解释这个现象以及解决方法。
解决了这个问题,你就可以成功获取class了,但是你只能获取div字符串的class,你的1并没有被加入class,这是你的语法问题
如果你想要加入两个固定的class,那么请把两个class放入一个字符串用空格分隔即可,如果你想要添加若干动态class和若干固定class,那么才需要一个数组,数组中第一个元素为字符串,里面是固定class,第二个元素为对象,里面为动态class,这又牵扯到你的第二个问题vue如何动态绑定class,动态class写法为一个对象,键名为你要绑定的class,键值为boolean值,true时此class被加入,false时不被加入
动态绑定class写法:
绑定多个class写法:
推荐你去找找 相关学习视频 看看学习一下 你这这样碎片时 学习是不行的 效果也不好
vue如何获取class的值?
<template>
<div ref="myDiv" class="my-class">Some content here</div>
</template>
<script>
export default {
mounted() {
const myDiv = this.$refs.myDiv
console.log(myDiv.className) // "my-class"
}
}
</script>
<template>
<div v-bind:class="'my-class'" ref="myDiv">Some content here</div>
</template>
<script>
export default {
mounted() {
const myDiv = this.$refs.myDiv
console.log(this.$el.className) // "my-class"
}
}
</script>
(1)V-for循环
(2)v-on绑定事件
(3)v-model双向数据绑定
(4)v-text渲染字符串
(5)v-html渲染html节点及字符串
(6)v-if判断
(7)v-show显示/隐藏
(8)v-bind绑定属性