《Vue如何渲染文本》

Posted 杨晓风-linda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Vue如何渲染文本》相关的知识,希望对你有一定的参考价值。

背景

为适应业务需求,规则说明的固定内容转换为由接口动态获取,这就要求前端对规则说明的渲染改变技术方案~其中使用v-html渲染文本,需要注意的是顺序标签的渲染~

技术点

  • Vue渲染文本的方式
  • style属性scoped相关

技术点解析

Vue渲染文本的方式

  • v-text
  • v-html

v-text

  • 将元素当成纯文本输出
  • 相对比较安全
  • 可简写为,支持逻辑运算
  • 且不会出现一闪而过之后消失,重新渲染元素的体验,但是使用起来不如方便
 <p v-text="message"></p>

  • 将元素当成纯文本输出
  • 当页面渲染过大过慢时,会出现一闪而过之后消失重新渲染元素的体验
 <p>  </p>

v-html

  • 将元素当成HTML标签解析后输出
  • 存在安全性问题
 <p v-html="html"></p>

style属性scoped相关

定义

  • HTML5中的新属性
  • 数据类型为布尔类型

作用

  • 实现组件的私有化
  • 只作用于当前组件的元素
  • 组件之间互不污染,实现模块化

原理

  • css带属性选择器
  • scoped会在DOM结构及css样式上加上唯一性的标记【data-v-something】属性
<style scoped>
.a >>> .b  /* ... */ 
</style>

将上述代码编译以后如下所示:

.a[data-v-f3f3eg9] .b  /* ... */ 

穿透

任何事物都有两面性,scoped也不例外,其使用起来虽然方便,但也会存在局限性。当需要修改公共组件时,便需要了解穿透的解决方案-深度作用选择器

  • >>>
  • /deep/  (sass或less) 如果使用/deep/报错或不生效,使用::v-deep
  • 使用两个style标签,一个带scoped,一个不带scoped,用以达到修改第三方组件的目的

解决方案

  • 使用v-html渲染接口获取的规则说明
  • 去掉scoped修饰
  • 在添加scoped属性的前提下,使用深度选择器进行样式穿透,成功渲染顺序标签

代码

方案一:v-html +  去掉scoped修饰

<template>
    <div class="rule-main">
        <div v-html="integralRule"></div>
    </div>
</template>

<script>

export default 
  data() 
    return 
      integralRule: ''
    
  ,
  mounted() 
    this.getRule()
  ,
  methods: 
    async getRule() 
      const res = 
        "data": "\\n <ol><li>suger and solt</li></ol>"
      
      this.integralRule = res.data
    
  

</script>

<style lang="less">
.rule-main 
    min-height: 100vh;
    padding: 10rpx 24rpx 30rpx 48rpx;
    color: #333;
    background: #f6f6f6;

ol, li 
  list-style: decimal;


</style>

方案二:v-html + scoped修饰 + 深度选择器

<template>
    <div class="rule-main">
        <div v-html="integralRule"></div>
    </div>
</template>


<style lang="less" scoped>
.rule-main 
    min-height: 100vh;
    padding: 10rpx 24rpx 30rpx 48rpx;
    color: #333;
    background: #f6f6f6;

/deep/ li 
  list-style: decimal;

</style>

UI

扩展

以上是关于《Vue如何渲染文本》的主要内容,如果未能解决你的问题,请参考以下文章

vue文本渲染的三种方法

Vue.js 渲染简写样式存在的问题

Vue.js 渲染简写样式存在的问题

vue-常用指令&条件渲染&列表渲染

后端开发者的Vue学习之路

Vue中render渲染函数详解