返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue实现插槽下渲染dom字符串的使用
  • 743
分享到

Vue实现插槽下渲染dom字符串的使用

Vue渲染dom字符串Vue渲染dom 2023-05-16 14:05:18 743人浏览 泡泡鱼
摘要

目录前言需求v-htmlv-outerHTML前言 Vue插槽想必大家都不陌生了,它可以在使用组件的时候决定组件的一部分内容如何渲染。但我最近遇到个需求需要将 dom 字符串插入到插

前言

Vue插槽想必大家都不陌生了,它可以在使用组件的时候决定组件的一部分内容如何渲染。但我最近遇到个需求需要将 dom 字符串插入到插槽下动态渲染插槽的内容,查找了很多资料都没找到相关的内容,后来自己想办法解决了,特此写个文章记录下。

需求

先来简单介绍下需求:这是在开发一个低代码平台的时候所遇到的需求,用户可以自己写一些组件上传到平台,在使用的时候可以对组件的 props slots events 进行配置,这就涉及到了动态插槽内容的实现了。对于代码编辑器的实现使用了 code-mirror,感兴趣的可以去看下,这里就不多说了。这里主要讲如何实现动态插槽内容渲染。

先来大致看下代码的上下文:

<template>
    <Component
        v-bind="componentProps"
    >
        <template
            v-for="item of componentSlots"
            #[item[0]]
        >
            
        </template>
    </Component>
</template>

<script setup lang="ts">
    const Component = defineAsyncComponent({
        // ...
    })
    const componentProps = ref({})
    const componentSlots = ref<[string, string][]>([])
    
    onMounted(async () => {
        componentProps.value = await loadProps()
        componentSlots.value = await loadSlots()
    })
</script>

v-html

说到渲染 dom 字符串,那 v-html 肯定是首要想到的。但是 template 标签上是无法使用 v-html 的,那么只能在 template 下写一个普通元素来塞 dom 字符串,代码如下:

<template
    v-for="item of componentSlots"
    #[item[0]]
>
    <span v-html="item[1]">
    </span>
</template>

这样的确实现了动态渲染插槽内容的需求,但是多出一个标签总是感觉不太妥当;而且也很难保证这个多出的 span 不会对组件的布局产生影响。这让我又陷入的沉思...

v-outerHTML

既然 innerHTML 不完全满足需求,那么使用 outerHTML 不就完美解决这个问题了吗?于是我去查关于 vue 如何使用 outerHTML 相关资料,发现并没有很好的案例,那就自己实现一个吧。

export const vOuterHTML = {
    bind(el, binding) {
        el.outerHTML = binding.value
    },
    update(el, binding) {
        el.outerHTML = binding.value
    },
}
<template
    v-for="item of componentSlots"
    #[item[0]]
>
    <span v-outerHTML="item[1]">
    </span>
</template>

代码保存,页面一刷新,这不完美实现了吗?但是等我去编辑 dom 字符串并保存后发现问题了,组件渲染内容并没有改变,控制台也报错了。

什么原因呢?原来是因为在 update 阶段时,span 已不在页面中,因此无法对他执行 outerHTML 赋值。

那怎么办呢?只需要在 bind 阶段记住 span 的父节点,然后在更新阶段手动再创建一个 spanappend 到父节点下,再进行 outerHTML赋值即可,代码如下:

export const vOuterHTML = (() => {
    let parentnode = null
    
    return {
        bind(el, binding) {
            parentNode = el.parentNode
            el.outerHTML = binding.value
        },
        update(el, binding) {
            if (parentNode) {
                const span = document.createElement('span')
                parentNode.appendChild(span)
                span.outerHTML = binding.value
            }
        },
        unbind() {
            if (parentNode) {
                parentNode = null
            }
        }
    }
})()

到此这篇关于Vue实现插槽下渲染dom字符串的使用的文章就介绍到这了,更多相关Vue 渲染dom字符串内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue实现插槽下渲染dom字符串的使用

本文链接: https://lsjlt.com/news/209996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue实现插槽下渲染dom字符串的使用
    目录前言需求v-htmlv-outerHTML前言 Vue插槽想必大家都不陌生了,它可以在使用组件的时候决定组件的一部分内容如何渲染。但我最近遇到个需求需要将 dom 字符串插入到插...
    99+
    2023-05-16
    Vue 渲染dom字符串 Vue 渲染dom
  • Vue通过字符串关键字符实现动态渲染input输入框
    目录问题描述{ xxx } 标识字符渲染Dom组件设计组件开发重点输入完成事件动态编辑文本今天做一个简单的demo,就是有一个字符串,字符串里面有标识符,前端检测到标识符之后,需要将...
    99+
    2022-12-08
    Vue动态渲染input输入框 Vue 渲染input输入框 Vue input输入框
  • vue具名插槽的基本使用实例
    前言 具有名字的插槽slot使用 中的 "name" 属性绑定元素 注意: 1,如果没有匹配到 则放到匿名的插槽中 2,具名插槽的渲染顺序,完全取决于模板,而不是取决于父组件中...
    99+
    2024-04-02
  • 如何通过递归方法实现用json-diff渲染json字符串对比结果
    目录前言分析json-diff的结构用递归方法拼接json字符串字符串修改非数组对象修改数组对象修改总结前言 上一篇,对比了js-diff和json-diff,发现js-diff对比...
    99+
    2022-12-08
    json-diff渲染json字符串 json diff
  • vue怎么将字符串的一部分处理为html文档并渲染到页面
    这篇文章主要介绍“vue怎么将字符串的一部分处理为html文档并渲染到页面”,在日常操作中,相信很多人在vue怎么将字符串的一部分处理为html文档并渲染到页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”v...
    99+
    2023-07-02
  • vue如何将字符串的一部分处理为html文档并渲染到页面
    目录将字符串的一部分处理为html文档并渲染到页面应用场景需求概述核心思路 vue和react如何正常渲染一段html字符串1.react的方法:dangerouslySe...
    99+
    2024-04-02
  • JAVA删除字符串固定下标字串的实现
    目录需要修改的报文实现代码如下多存在多个不符合规定的数据然后你要删掉怎么操作呢?实现代码如下此解决方式在企业中有所应用,适合Java初级开发学习,参考。 需要修改的报文 当你拿到的报...
    99+
    2023-05-15
    JAVA删除下标字串 JAVA删除固定下标字串
  • 使用JavaScript怎么实现字符串去重
    这篇文章将为大家详细讲解有关使用JavaScript怎么实现字符串去重,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表...
    99+
    2023-06-14
  • 如何使用java实现字符串中的字母排序
    这篇文章主要介绍了如何使用java实现字符串中的字母排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用java实现字符串中的字母排序文章都会有所收获,下面我们一起来看看吧。题目要求java实现字符串中的...
    99+
    2023-07-06
  • Linux 使用shell脚本处理字符串的实现
    1. 截取字符串的前8位 expr substr "$string" 1 8 echo $string | awk '{print substr(,1,8)}' echo $string | cut -c...
    99+
    2022-06-04
    shell处理字符串 shell字符串处理
  • jOOQ串联字符串拒绝使用的原因实例
    jOOQ开箱即支持大量的SQL语法。因此,大多数用户在使用JDBC编写动态SQL时,不会像以前那样采用字符串连接的方式。 但时不时地,jOOQ不支持某个厂商的特定功能(是的,它发生...
    99+
    2022-11-13
    jOOQ串联字符串 jOOQ字符串
  • 如何使用C语言实现字符串逆序
    本篇内容介绍了“如何使用C语言实现字符串逆序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!编写一个函数 r...
    99+
    2024-04-02
  • 使用python怎么实现一个驻留字符串
    使用python怎么实现一个驻留字符串?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Py...
    99+
    2023-06-14
  • 如何使用go语言实现字符串比较
    今天小编给大家分享的是如何使用go语言实现字符串比较,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。go语言比较字符串的方法:1、使用“==”运算符,语法“字符串1==字符串2”;2、...
    99+
    2023-06-15
  • nodejs如何使用正则实现字符串替换
    今天小编给大家分享一下nodejs如何使用正则实现字符串替换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正则表达式的基本语...
    99+
    2023-07-05
  • python入门到实践-字符串的使用
    跟大家说说字符串拼接,记得在之前的文章里我也写过一句字符串拼接的代码,但是没有做过多的解释;在公众号[假装我是程序猿]中字符串那篇文章有提到,感兴趣的可以去看看; 对于字符串拼接我们可以通过 “+” 符号把两个或者多个字符串拼接在一起,看...
    99+
    2023-01-31
    字符串 入门 python
  • Vue Nuxt.js 中的服务器端渲染:使用案例、优点和最佳实践
    服务器端渲染 (SSR) 是在服务器端生成 HTML 页面并将预渲染的页面发送至浏览器的技术。在 Vue Nuxt.js 中,SSR 是一种强大工具,可以提升应用程序的性能、用户体验和搜索引擎优化 (SEO)。 用例: 提升初始加载速...
    99+
    2024-02-19
    Vue Nuxt.js SSR SEO 性能
  • Linux使用shell脚本处理字符串的实现方法
    这篇文章给大家分享的是有关Linux使用shell脚本处理字符串的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 截取字符串的前8位expr substr "$strin...
    99+
    2023-06-09
  • 使用Python去除字符串中某个字符的多种实现方式比较
    目录1、如何去掉字符串中不需要的字符?2、代码演示总结1、如何去掉字符串中不需要的字符? 实际案例: (1)过滤掉用户输入前后多余的空白字符:' nick2008@gmail...
    99+
    2024-04-02
  • Java案例使用集合方法实现统计任意字符串中字符出现的次数
    需求:键盘录入一个字符串,统计其中各个字符出现的顺序 分析: 1.使用Scanner类获取一个字符串2.创建HashMap集合,如果追求统计字符的美观性,可以使用TreeMap3.遍...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作