如何动态加载css文件

Posted

技术标签:

【中文标题】如何动态加载css文件【英文标题】:How to load css file dynamically 【发布时间】:2019-03-16 22:43:55 【问题描述】:

我们在我的应用程序中使用 Vue.jsVuetify。作为我的应用程序的一部分,我将根据该 API 响应在页面加载时进行 API 调用,整个应用程序将呈现所有组件。作为此 API 的一部分,我将获得名为 cssDirection 的属性,它会告诉哪个 css 文件应该加载它是 LTR 还是 RTL。

当我在 Angular 工作时,我们使用了this 方法。

现在我的问题是有什么解决方法可以在 Vue 中实现这一点而不是上述方法?我用谷歌搜索我没有找到任何解决方案。

谢谢

【问题讨论】:

【参考方案1】:

要动态加载 css 文件,你可以这样做

<template>
  <div>
    <button @click="appendFile">Click me to add css file</button>
  </div>
</template>

<script>
export default 
  methods : 
    appendFile()
      let file = document.createElement('link');
      file.rel = 'stylesheet';
      file.href = 'myfile.css'
      document.head.appendChild(file)
    
  

</script>

【讨论】:

【参考方案2】:

在页面中注入&lt;link&gt;也可以在vue中使用,另一种方法是使用webpack的代码拆分。

if (data.rtl) 
  import("./css/rtl.css")
 else 
  import("./css/ltr.css")

【讨论】:

它是否适用于从 CDN 等外部源加载 CSS 文件? 不是开箱即用的,有 openbase.io/js/webpack-external-import 的插件,但除非它在你的代码库中经常发生,否则我建议像其他答案建议的那样手动将它添加到 dom【参考方案3】:

使用 import("") 从资产加载静态 css,例如,如果您使用多个文件进行样式设置:

在 App.vue 上:

<script setup>
import  useStore  from "vuex";
import  computed, watchEffect  from "@vue/runtime-core";

const store = useStore();
const theme = computed(() => store.state.theme);

watchEffect(() => 
  import(`./assets/css/themes/$theme.value.css`);
);
<script/>

【讨论】:

以上是关于如何动态加载css文件的主要内容,如果未能解决你的问题,请参考以下文章

如何动态加载css文件

动态加载js和css

将 CSS 动态加载到文档头部并在加载后等待

如何动态加载js文件

如何在cordova中动态加载CSS

如何在js文件中动态加载另一个js文件?