【问题标题】:Applying global CSS to injected HTML (v-html)将全局 CSS 应用于注入的 HTML (v-html)
【发布时间】:2019-05-16 21:47:00
【问题描述】:

我正在尝试使用 Vue 从我的数据库中注入 HTML。我能够成功注入 HTML,但是我遇到的问题是我的框架样式表 (Vuetify) 没有被应用。
它应用于页面的其余部分,而不是注入的 HTML。

如何获取注入的 HTML 以使用我的 Vuetify CSS?

此外,虽然我在检查 HTML 时可以看到它们,但我的 HTML 中的图像也没有呈现。

<div v-html="post.format"></div>

输出 HTML:

<div>
  <v-container grid-list-md="" text-xs-center="">
    <v-layout row="" wrap="">
      <v-flex xs12="" md12="" lg6="">
        <p class="text-lg-left">Post description text</p>
      </v-flex>
      <v-flex xs12="" md12="" lg6="">
        <v-img class="center" style="max-width:250px" src="/img/1.jpg"></v-img>
      </v-flex>
    </v-layout>

  </v-container>

  <v-container grid-list-md="" text-xs-center="">
    <v-layout row="" wrap="">
      <v-flex xs12="" md12="" lg6="">
        <v-img width="250px" class="center" src="/img/2.jpg">
        </v-img>
      </v-flex>
      <v-flex xs12="" md12="" lg6="">
        <p class="text-lg-left">More post description text</p>
      </v-flex>
    </v-layout>
  </v-container>
</div>

【问题讨论】:

  • 你能显示 post.format html
  • 用 post.format HTML 更新了它。
    标签之间是存储在我的数据库中的 HTML。检查页面上的元素时看起来不错。但是我的 Vuetify css 并不仅仅应用于页面的这一部分。 VueJS v html 标签也无法正确呈现。例如,我的 时显示
  • 那是因为 Vue 不处理 v-html 的输出。你可以阅读here
  • 有没有办法插入 HTML 并让 Vue 处理它?
  • 不幸的是,我认为这是不可能的。如果我可以问的话,你想通过注入这样的标记来实现什么。也许有更好的方法来处理您在这里尝试做的事情。

标签: javascript html vue.js vuetify.js


【解决方案1】:

正如@Husam 提到的,Vue 不允许你这样做。它最终是最好的,甚至应该谨慎使用v-html。关于css,from the Vue.js site

在单文件组件中,作用域样式不适用于内容 在 v-html 中,因为 Vue 的模板不处理该 HTML 编译器。如果你想用作用域 CSS 定位 v-html 内容,你 可以改为使用 CSS 模块或额外的全局元素 使用手动范围界定策略,例如 BEM。

至于更好的方法,从您的输出外观来看,我建议将您的纯文本数据存储在数据库/集合中,并为此类帖子制作组件模板。在您的数据库/集合中,您可以存储标题、描述、imageURL,也许还有一个 componentType。然后,在渲染时,您可以根据存储在 db 中的内容渲染特定的组件类型。

这样会更清洁、更安全,也许更容易维护。 I created a sample of what I'm talking about here on CodeSandbox. 沙盒正在阻止图像加载,但它就在那里。我也将您的输出分成两个不同的组件来查看。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签