如何在 Nuxt 中使用动态 CSS 文件?

Fab*_*chi 3 javascript css vue-router nuxt.js

我正在一个项目中工作,该项目有不同的用户使用他们的徽标。基于 API 调用,我想加载具有不同调色板的不同 CSS。

现在我有一个css文件夹里面assets的文件夹与main.js(我的自定义字体风格等)和其他文件中有自定义调色板:<color-name>-palette.css

在我中,nuxt.config我这样称呼 CSS 颜色:

  css: [
    '~/assets/style/app.styl',
    '~/assets/css/main.css',
    '~/assets/css/orange-palette.css'
  ],
Run Code Online (Sandbox Code Playgroud)

有什么方法可以根据 URL 路径/API 调用绑定 CSS 文件而不是将路径放在那里?

我不确定我是否也可以在模板上使用它,将 CSS 文件绑定在那里。是否可以?

谢谢

Jal*_*sem 7

要动态加载 CSS 文件,请使用head()代替head: {}. 这样,值就可以是动态的。在https://codesandbox.io/s/l4on5508zm 上查看以下带有工作演示的代码

<template>
  <section>
    <h1>Index</h1>
    <button @click="swap">swap</button>
    <p v-text="cur" />
  </section>
</template>

<script>
export default {
  head() {
    return {
      link: [
        {
          rel: "stylesheet",
          href: `/${this.cur}.css`
        }
      ]
    };
  },
  data() {
    return {
      cur: "light"
    };
  },
  methods: {
    swap() {
      if (this.cur === "light") {
        this.cur = "dark";
      } else {
        this.cur = "light";
      }
    }
  }
};
</script>
Run Code Online (Sandbox Code Playgroud)

查看上面的代码片段,您可以通过 head() 函数动态引入要在页面上使用的 css 文件。您可以根据用户交互(例如我的按钮单击交互)更改要在任何页面上即时使用的 CSS。