首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue:只有在创建组件时才导入SCSS

Vue:只有在创建组件时才导入SCSS
EN

Stack Overflow用户
提问于 2020-01-26 09:48:27
回答 1查看 238关注 0票数 0

我试图进口的材料SCSS只为我的管理组件。

这在本地开发时很好,但是一旦我将我的站点部署到Firebase主机,材料样式就会应用到我的所有SPA中,包括客户端。

我试过:

代码语言:javascript
复制
// Importing the SCSS files within the Admin component ID
  #admin {
    @import "../../../../node_modules/vue-material/dist/vue-material.min.css";
    @import "../../../../node_modules/vue-material/dist/theme/default.css";
  }

然后

代码语言:javascript
复制
// Importing the SCSS files within the Admin component CLASS
  .admin {
    @import "../../../../node_modules/vue-material/dist/vue-material.min.css";
    @import "../../../../node_modules/vue-material/dist/theme/default.css";
  }

然后,我在组件本身中尝试了它。

代码语言:javascript
复制
// Importing the SCSS files within the Admin components beforeCreate lifecycle hook
  beforeCreate() {
    // Ensuring style files only get loaded if this component is used
    import("vue-material/dist/vue-material.min.css")
    import("vue-material/dist/theme/default.css")
  },

最后:

代码语言:javascript
复制
// Importing the SCSS files within the Admin components, which is only rendered if in the
// main App component its v-if is true.
<script>
.
.
.
import "vue-material/dist/vue-material.min.css"
import "vue-material/dist/theme/default.css"
.
.

我想这可能是因为浏览器中的一些缓存,但是我尝试过重新加载Chrome并尝试了多个不同的浏览器,但问题依然存在。

此外,我还试着注释掉CSS导入和重新部署,这确实有效。所以问题就在组件中,它是如何导入和加载样式的.

另外,奇怪的是,我在组件的created钩子中添加了控制台日志,只是为了检查是否创建了它,即使它不应该创建,也不应该创建。所以我不知道这些款式是怎么进来的。我认为它们与构建过程中的其他部分混为一谈。

我相信有一个简单的解决办法,但我已经用完了我的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-26 11:26:14

经过更多的尝试和错误之后,我发现唯一有效的方法是在组件获得HEAD之后,将样式从CDN动态导入到created元素。就像这样:

代码语言:javascript
复制
created() {
  this.inject_material_fonts_and_icons_into_header()
},
.
.
.
methods: {
inject_material_styles_into_header() {
  [
    "https://unpkg.com/vue-material@beta/dist/theme/default.css",
    "https://unpkg.com/vue-material@beta/dist/vue-material.min.css",
    "https://fonts.googleapis.com/css?family=Roboto:400,500,700,400italic|Material+Icons"
  ].forEach(route => {
    const link_el = document.createElement("link")

    link_el.setAttribute("rel", "stylesheet")
    link_el.setAttribute("href", route)

    document.head.appendChild(link_el);
  })
}
}

如果有人有更好的建议,请不要犹豫。我不喜欢依赖CDN,但在这一点上,我不能花更多的时间在这个问题上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59917185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档