gpt4 book ai didi

javascript - Vuejs SPA 动态主题

转载 作者:行者123 更新时间:2023-12-01 16:25:48 24 4
gpt4 key购买 nike

我有一个已构建的 Vuejs 单页应用程序,我想添加用户可切换的动态主题。用户在某处或某处有按钮的地方,他们可以单击“浅色”或“深色”主题选项,整个应用程序会立即更新。我还想让我所有的“主题”scss 文件都是本地的。

这个答案here是迄今为止我发现的最接近的,但主题不是本地的。

const themes = {
flatly: "https://bootswatch.com/4/flatly/bootstrap.min.css",
materia: "https://bootswatch.com/4/materia/bootstrap.min.css",
solar: "https://bootswatch.com/4/solar/bootstrap.min.css"
};

如果我能弄清楚如何让这个答案与本地主题文件一起工作,那就太好了,但是用本地路径切换链接路径是行不通的。

const themes = {
dark: "dark-theme.scss",
light: "light-theme.scss"
};

我怀疑这不起作用,因为 Webpack 或其他一些不包含 scss 文件的编译问题。

我发现如果我将以下内容添加到我的 index.html 中,我可以让我的主题文件出现在客户端源代码中 <link rel="stylesheet" type="text/css" href="<%= BASE_URL %>dark-theme.scss">但后来我不知道如何在我的应用程序中引用它。也许像 http://localhost:8080/dark-theme.scss 这样的链接?但是我认为这不会在生产中起作用(而且它在本地也不起作用)。

我也看过:
  • this这与上面链接的答案类似,并且遇到了类似的问题
  • this它只有 scss 变量,不能向类添加属性,例如
  • this我认为这不是一个非常干净的解决方案,因为它要求所有组件都了解主题等

  • 我也尝试过类似 import "@/path/to/theme.scss";在我的 main.ts确实有效的文件,但我不知道如何利用它来使主题可切换。它只是在我的脑海中添加了一个类似以下的元素,它没有 id 或 class,因此我无法有效地查询它以将其切换出去。使用 require也做类似的事情。

    <style type="text/css" >
    ...
    </style>

    最佳答案

    main.ts:

    import "@/path/to/dark-theme.scss"
    import "@/path/to/light-theme.scss"

    黑暗主题.scss:
    body.dark {
    /* rest of the theme */
    }

    轻主题.scss:
    body.ligh {
    /* rest of the theme */
    }

    index.html(或根据本地存储或操作系统模式从 main.ts 注入(inject)):
    <body class="light">

    你的开关在哪里:
    methods: {
    toggleTheme() {
    document.body.classList.toggle('dark')
    document.body.classList.toggle('light')
    }
    }

    关于javascript - Vuejs SPA 动态主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61845819/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com