Vue 中渲染字符串形式的组件标签

2023-11-07

在vue中如果要渲染字符串形式的标签,vue 提供了 v-html 指令,可以很方便的渲染出来。但是如果这个标签是一个组件,或者element-ui 的组件时,就不能解析出来了,因为v-html 只能解析原生的属性。

那么就要使用jsx渲染来解析

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>

<body>
    <div id="app">
        <el-form v-model="form" label-width="100px" class="process-edit-form">
            <el-form-item v-for="item in formParams" :key="item.name" :label="item.name + ':'">
                <com1 :html="item.html" :form="form"></com1>
                <!-- 这里取 item.html并渲染-->
            </el-form-item>
        </el-form>
        {{ form }}
    </div>
</body>
<!-- 先引入 Vue -->
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
    Vue.component('com1', {
        props: {
            html: String,
            form: Object,
        },
        render(h) {
            const com = Vue.extend({
                template: this.html,
                props: {
                    form: Object,
                }
            })

            return h(com, {
                props: {
                    form: this.form
                }
            })
        }
    })

    var app = new Vue({
        el: "#app",
        data: {
            button: '<el-button type="primary">按钮</el-button>',
            form: {
                name: '',
                age: ''
            },
            formParams: [{
                    name: '名称',
                    type: 'name',
                    html: '<el-input v-model.trim="form.name"></el-input>'
                },
                {
                    name: '年龄',
                    type: 'age',
                    html: '<el-input v-model.trim="form.age"></el-input>'
                },
            ]
        },
        mounted() {
            this.$nextTick(function () {
                this.$forceUpdate();
            })
        }
    })
</script>

</html>

当然在开发过程中肯定不会像上面那么些,将采用以下方法:

<template>
    <div :class="$options.name">
        <cmp :html="el"></cmp>
    </div>
</template>

<script>
import Vue from 'vue';
import AudioPlay from '@/components/media/audioPlay';
Vue.component('audio-play', AudioPlay);

export default {
    name: 'audio',
    data() {
        return {
            el: '<div><audio-play></audio-play><p>hello world</p></div>'
        };
    },
    components: {
        cmp: {
            props: {
                html: String
            },
            render(h) {
                const com = Vue.extend({
                    template: this.html
                })
                return h(com, {})
            }
        }
      },
};
</script>

<style lang="sass" scoped>

</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 中渲染字符串形式的组件标签 的相关文章

随机推荐

  • 【网络通信与信息安全】之深入解析TCP和UDP传输协议

    一 什么是 socket Socket 的英文原义是 孔 或 插座 在编程中 Socket 被称做套接字 是网络通信中的一种约定 Socket 编程的应用无处不在 我们平时用的 QQ 微信 浏览器等程序 都与 Socket 编程有关 那么我
  • 激活Conda环境并在pycharm使用

    第一步 打开Anaconda Prompt 第二步 查看当前存在的虚拟环境 conda env list 第三步 创建虚拟环境 conda create n 环境名 python X X X 如果不清楚python版本 可以用以下命令查看
  • web前端技术笔记(十)JavaScript函数、条件语句、数组、循环语句

    JavaScript函数 函数 函数定义与执行 变量与函数预解析 提取行间事件 匿名函数 网页换肤 函数传参 函数 return 关键字 条件语句 if else switch语句 数组 循环语句 for循环 while循环 数组去重 获取
  • Linux wget命令

    一 wget命令 wget命令用来从指定的URL下载文件 wget非常稳定 它在带宽很窄的情况下和不稳定网络中有很强的适应性 如果是由于网络的原因下载失败 wget会不断的尝试 直到整个文件下载完毕 如果是服务器打断下载过程 它会再次联到服
  • spring事务原理1

    spring 事务原理 传播机制 事务挂起 spring自带的JdbcTemplate使用示例 查询 public
  • websocket请求用自定义注解@WSRequestMapping访问,类似springmvc @RequestMapping访问。

    AnnoWebsocket websocket请求用自定义注解方式访问 类似于springmvc RequestMapping注解方式访问 源码github地址 https github com luxiangzhou AnnoWebsoc
  • 微信小程序getApp()和App()方法详解

    一 App App 是一个小程序的入口方法 写在app js文件里 开发时我们主要是把一些全局变量 全局方法放在App 里面 比如用户名 请求数据时的URL等 app js App onLaunch 展示本地存储能力 const logs
  • WY易盾cb、fp逆向分析

    内容仅供参考学习 欢迎朋友们V一起交流 zcxl7 7 目标 网址 案例地址 这个好像还没改版 我看官网体验那边已经进行了混淆 分析 这个进行的请求很乱 我就不说怎么找的了 到时候越听越乱 一共有2个请求很重要 getConf这个请求返回了
  • 01-windows下载与安装neo4j

    1 因为neo4j的官网总是在变 所以下载地址有时候找不到 neo4j 3 1 0 Releases 官方下载链接 windows64 zip https neo4j com artifact php name neo4j communit
  • TCP/IP协议栈与数据包封装

    TCP IP协议栈与数据包封装 TCP IP网络协议栈分为应用层 Application 传输层 Transport 网络层 Network 和链路层 Link 四层 如下图所示 该图出自 TCPIP 图 36 1 TCP IP协议栈 两台
  • 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange

    1 查看当前rabbitmq已安装的插件 查看当前的rabbitmq 安装了哪些插件 rabbitmq plugins list root yq test1 rabbitmq plugins list Configured E explic
  • SQL Server添加列及删除列

    SQL Server数据库添加列是我们经常要用到的操作 下文对SQL Server添加列的实现方法作了详尽的阐述 供您参考学习 AD SQL Server添加列的方法比较简单 下面就为您详细介绍SQL Server添加列及删除列的语句写法
  • “提升工作效率和多任务处理能力”,Microsoft Edge最新功能实测分享

    前言 Microsoft Edge浏览器是微软基于 Chromium 开源项目及其他开源软件开发的网页浏览器 Edge浏览器是一款现代化的浏览器 它拥有众多功能和强大的性能 为用户带来更加流畅的浏览体验 一 Edge浏览器的使用体验及优缺点
  • 华电保定计算机考研,华北电力大学(保定)计算机技术怎么样

    华北电力大学 保定 计算机技术怎么样 我们可以从以下几个方面来判断华北电力大学 保定 计算机技术怎么样 第一 华北电力大学 保定 计算机技术全国综合排名 根据浙华北电力大学 保定 计算机技术学科实力 教师水平 科研成果等多项指标 给华北电力
  • 强化学习笔记(4)-深度Q学习

    以下为学习 强化学习 原理与python实现 这本书的笔记 在之前学习到的强度学习方法中 每次更新价值函数只更新某个状态动作对的价值估计 但是有些情况下状态动作对的数量非常大 不可能对所有的状态动作对逐一更新 函数近似方法用参数化的模型来近
  • 网络协议详解:IP

    目录 两种IP地址 拆解IP地址 1 静态方式 2 动态方式 网络掩码 mask 求主机号和网络号 特殊IP地址 1 网络号 2 广播号 3 环回地址 4 内网地址 公网地址 关系 概念图 专门给内网使用的地址 同一网络的IP地址不可重复
  • Python学习-----起步2(变量与转义符)

    目录 前言 Python变量 常量使用规则 基本数据变量类型 整形 int 浮点型 float 字符串类型 str 布尔类型 bool 转义符 习题 前言 在我们学习C语言时 我们学了很多种类型的变量 有int char float dou
  • JDK版本导致Unsupported major.minor version 52.0 error

    出现问题原因 gt gt 分析 JDK版本不一致的问题 在eclipse中开发的项目有个Java build path中可以配置的JDK java compiler中可以配置compiler level eclipse gt windows
  • Docker客户端的常用命令

    搬运地址 启动Docker systemctl start docker 帮助命令 docker版本 docker version docker信息 docker info 帮助文档 docker help 此命令会列出所有Docker命令
  • Vue 中渲染字符串形式的组件标签

    在vue中如果要渲染字符串形式的标签 vue 提供了 v html 指令 可以很方便的渲染出来 但是如果这个标签是一个组件 或者element ui 的组件时 就不能解析出来了 因为v html 只能解析原生的属性 那么就要使用jsx渲染来