开发者问题收集

如何在 Nuxt.js 和服务器端使用 css 中的 v-bind

2022-11-17
1093

我希望我的页面具有动态配色方案。根据 URL,我发送一个 API 请求,从数据库获取配色方案。

为此,我在 nuxtServerInit 存储钩子中获取颜色。然后我在 CSS 中使用 v-bind() 来动态地为组件着色。

供参考, https://vuejs.org/api/sfc-css-features.html#css-modules 。 例如:

#main-container {
      max-width: 500px;
      margin: auto;
      background-color: v-bind('designTemplate.backgroundColor');
    }

这里,designTemplate 是一个计算变量,它从存储中获取值。

我正在使用 SSG。检查生成的文件时,我发现颜色未绑定到 css,并且服务器呈现的页面没有所需的颜色。

在生成的文件中,我看到

.class-name[data-v-15114cda]{background-color:var(--fec1f67e)

但在文件中找不到 css 变量 fec1f7e。只有在水合过程中才会实际应用颜色。

1个回答

更新: 解决了问题。使用另一种方法满足了我的要求。

我没有使用 css 中的 v-bind,而是创建了根级 css 变量。这是在我的页面的头部完成的。

head() {
 return {
   style: [
        {
          cssText: `
            :root {
              --base-color: ${this.designTemplate.baseColor};
              --background-color: ${this.designTemplate.backgroundColor};
            }
          `,
          type: 'text/css'
        }
      ]
   }
}

有了这个,我可以在所有文件中访问这些变量并将它们设置为:

#main-container {
      max-width: 500px;
      margin: auto;
      background-color: v-bind('designTemplate.backgroundColor');
    }

css 变量被注入到 html 的头部,通过服务器端生成,我得到了正确着色的服务器渲染页面。

Siddharth Khera
2022-12-17