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>

前端使用ffmpeg出现ReferenceError: SharedArrayBuffer is not defined如何解决

问题原因:

“SharedArrayBuffer is not defined” 错误是因为在浏览器环境中,SharedArrayBuffer 对象被认为是一种潜在的安全风险。为了防止 Spectre 攻击等漏洞,现代浏览器通常会禁用或限制对 SharedArrayBuffer 的使用

SharedArrayBuffer 是一种 JavaScript 对象,用于在多线程环境中共享内存。然而,由于共享内存的特性,它可能导致安全漏洞。攻击者可以通过操纵共享内存来执行恶意代码,因此大部分浏览器对其进行了限制

具体问题详情可参考这篇文文章:https://juejin.cn/post/7065181402848837662#heading-0

解决办法:

本地运行解决方案:  
在vue.config.js中的devServer中配置请求头:

devServer: {
headers: {

'Cross-Origin-Embedder-Policy': 'require-corp',
'Cross-Origin-Opener-Policy': 'same-origin',
    }
  }

在vite.config.js中的devServer中配置请求头:

server: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp'
    },
生产环境运行解决方案:

vue路由要使用mode: "hash"的方式;
nginx部署,为指定路由加上请求头

location /ffmpeg {
    root   html/dist;
    index  dolphin-ffmpeg.html;
    add_header Cross-Origin-Opener-Policy same-origin;
    add_header Cross-Origin-Embedder-Policy require-corp;
}