Vue动态设置样式

在 Vue.js 中,当使用 v-for 指令遍历一个数组或对象时,你可以根据数组或对象中的值动态地设置样式。这通常通过结合 :style:class 绑定以及计算属性或内联对象/数组语法来实现。

以下是一些示例,展示了如何在 v-for 中根据不同的值设置样式:

使用 :style 绑定内联样式

<template>
  <div v-for="(item, index) in items" :key="index" :style="getItemStyle(item)">
    {{ item.name }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: 'Item 1', isActive: true },
        { name: 'Item 2', isActive: false },
        // ...更多项目
      ]
    };
  },
  methods: {
    getItemStyle(item) {
      return {
        color: item.isActive ? 'green' : 'red',
        fontSize: '20px'
      };
    }
  }
};
</script>

使用 :class 绑定类名

对象语法

<template>
  <div v-for="(item, index) in items" :key="index" :class="getItemClasses(item)">
    {{ item.name }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: 'Item 1', isActive: true, hasError: false },
        { name: 'Item 2', isActive: false, hasError: true },
        // ...更多项目
      ]
    };
  },
  methods: {
    getItemClasses(item) {
      return {
        'active-class': item.isActive,
        'error-class': item.hasError
      };
    }
  }
};
</script>

<style>
.active-class {
  background-color: green;
}

.error-class {
  border: 1px solid red;
}
</style>

数组语法

<template>
  <div v-for="(item, index) in items" :key="index" :class="[item.isActive ? 'active' : '', item.hasError ? 'error' : '']">
    {{ item.name }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: 'Item 1', isActive: true, hasError: false },
        { name: 'Item 2', isActive: false, hasError: true },
        // ...更多项目
      ]
    };
  }
};
</script>

<style>
.active {
  background-color: yellow;
}

.error {
  border: 1px solid red;
}
</style>

使用计算属性

如果样式逻辑比较复杂,你也可以使用计算属性来返回一个对象或数组,该对象或数组包含应该应用的类名或样式。

<template>
  <div v-for="(item, index) in items" :key="index" :class="itemClasses(item)">
    {{ item.name }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        // ...项目数据
      ]
    };
  },
  methods: {
    itemClasses(item) {
      return [
        item.isActive ? 'active' : '',
        item.hasError ? 'error' : ''
      ].filter(cls => cls);
    }
  }
};
</script>
Vue
最后修改于:2025年09月18日 14:51

评论已关闭