Vue.js中v-html衬着的dom增加scoped的款式

在vue.js中,要将一段字符串渲染成html,可以运用v-html指令。

然则 官方文档 中的v-html部份也提醒了

在单文件组件里,
scoped 的款式不会应用在 v-html 内部,由于那部份 HTML 没有被 Vue 的模板编译器处置惩罚。假如你愿望针对 v-html 的内容设置带作用域的 CSS,你可以替换为 CSS Modules 或用一个分外的全局 <style> 元素手动设置相似 BEM 的作用域战略。

除了官方文档给的计划之外,有一个更轻便的体式格局:深度作用选择器

假如你愿望 scoped 款式中的一个选择器可以作用得“更深”,比方影响子组件,你可以运用 >>> 操作符:

<style scoped>
.a >>> .b { /* ... */ }
</style>

上述代码将会编译成:
.a[data-v-f3f3eg9] .b { /* ... */ }
有些像 Sass 之类的预处置惩罚器没法准确剖析 >>>。这类情况下你可以运用 /deep/ 操作符取而代之——这是一个 >>> 的别号,一样可以一般事情。

示例

<div class="product-content" v-html="contentView"></div>

<script>
export default {
    data(){
        return {
            contentView:'<h4>This is a title rendered by v-html</h4>'
        }
    }
}
</script>

<style scoped lang="less">
.product-content {
    ...
    /deep/ h4 {
      color: #333;
      ...
    }
  }
</style>

reference

https://cn.vuejs.org/v2/api/#…
https://vue-loader-v14.vuejs….
https://segmentfault.com/q/10…
https://blog.csdn.net/zgh0711…

    原文作者:OceanZH
    原文地址: https://segmentfault.com/a/1190000018820271
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞