v-html渲染组件问题

由于前面对html进行过解析,今天想用vue拖拽,实现一手类似快站那种自动生成代码,结果就遇到了拖拽组件过去怎么无法解析的问题,因为vue的v-html为了防止xss攻击只能解析html

思路

先实现简单页面 分三块左中右,左边是需要拖动的组件,中间是用于组件排列显示,右边是解析出的代码

左边组件列表代码

  <div ref="test" >
    <one-component :title="title[0]" element="<el-radio v-model='radio' label='1'>备选项</el-radio>">
      <el-radio slot="component" v-model="radio" label="1">备选项</el-radio>
    </one-component>
  </div>
</template>

<script>
import OneComponent from '../components/oneComponent'
export default {
  name: '',
  data() {
    return {
        radio: '2',
        title: ['Radio 单选框']
    }
  },
  components:{
    OneComponent
  },

}
</script>

<style lang="stylus" scoped>
</style>

中间组件显示代码

  <div class="all">
    <el-form label-width="80px" label-position="left" :model="ruleForm" :rules="rules">
      <el-form-item label="模拟宽" prop="inputW">
        <el-input v-model="ruleForm.inputW" placeholder="请输入宽"></el-input>
      </el-form-item>
      <el-form-item label="模拟高" prop="inputH">
        <el-input v-model="ruleForm.inputH" placeholder="请输入高"></el-input>
      </el-form-item>
    </el-form>
    <Variablebox
      class="box"
      :width="ruleForm.inputW"
      :height="ruleForm.inputH"
    ></Variablebox>
  </div>
</template>
<script>
import Variablebox from "../components/Variablebox";
export default {
  name: "",
  data() {
    var checkSize = (rule, value, callback) => {
      console.log(value);
      if (value < 500 || value > 1000) {
        callback(new Error("建议500 ~ 1000内的数字"));
      } else if (!Number.isInteger(Number(value))) {
        callback(new Error("请输入数字值"));
      } else {
        callback();
      }
    };
    return {

      ruleForm: {
        inputW: 500,
        inputH: 500
      },

      rules: {
        inputW: [{ validator: checkSize, trigger: "blur" }],
        inputH: [{ validator: checkSize, trigger: "blur" }]
      }
    };
  },
  methods: {
  },
  components: {
    Variablebox
  }
};
</script>
<style lang="stylus" scoped>
.all
  padding: 0 20px
  display: flex
  flex-direction: column
</style>

接下来实现组件的拖拽使用drag和drop 将组件显示在Variablebox页面上,使用v-html无效后,百度了一下,发现基本上叫使用vue.Vue.compile( template ) 和render但是没给例子

compile是将一个模板字符串编译成 render 函数,就是最后
都是render调用createElement,转化成html,但是我们我们是直接渲染
</el-radio slot="component" v-model="radio" label="1"/>
所以个人
感觉行不通,最后只能尝试新建组件然后挂载上去

   new Vue({
        // el: ‘#app'
        template: this.ele,
         data:{
           radio: '2'
        },
      }).$mount("#apps");

这样算是暂时决解掉这个问题吧

vue中运用v-html渲染标签

获取后台数据带 标签 内容,需要渲染到页面展示。最终效果如下:图文排版

1.首先拿到数据,单独处理

2.接着在html中输出即可

(0)

相关推荐

  • vue通过v-html指令渲染的富文本无法修改样式的解决方案

    1.问题描述 在最近的vue项目中遇到的问题:v-html渲染的富文本,无法在样式表中修改样式. 代码如下,div.article-context里面的图片修改成自适应,但是没有任何效果. <div class="article-context" v-html="post.content"></div> <style scoped> .article-context img { width: auto; height: auto;

  • 用v-html解决Vue.js渲染中html标签不被解析的问题

    前言 最近在工作中遇到一个问题,在网页中后台传来的json数据中包含html标签,将该json数据绑定到Vue.js中对象中,对该对象进行for循环,发现数据中的html标签不能被解析,而是当作字符显示出来. 问题如下所示: 解决方法: Vue.js中提供了v-html这个指令来解决这个问题,或者对数据对象使用{{{vm.data}}}三个大括号来包裹对象,就可以正常解析了. 代码改动如下: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家都 学习或者工作能带来一定的帮助,如果有疑问大家

  • javascript表格的渲染组件

    表格的渲染组件,demo请点击http://lovewebgames.com/jsmodule/table.html,git源码请点击https://github.com/tianxiangbing/table 如上图所示,功能基本包括常用表格中遇到的分页.搜索.删除.AJAX操作.由于是用的HANDLEBARS渲染的,所以样式可能很好的控制,要加新的功能也较容易. 调用例子 html <div class="form"> 名称: <input type="

  • vue内置组件component--通过is属性动态渲染组件操作

    我就废话不多说了,大家看代码吧~ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script src="https://cdn.bootcss.com

  • vue将data恢复到初始状态 && 重新渲染组件实例

    1. 将data恢复到初始状态 Object.assign(this.$data, this.$options.data()) // 初始化data 这里的 this.$options.data() 作为源对象, this.$data 作为目标对象.源对象覆盖并合并目标对象中的内容,即有则覆盖,无则添加. 2. 重新渲染组件 方法一:v-if(可以重置生命周期) 虽然能实现重新渲染,但不推荐首选 方法二:给组件加key值[推荐] 通过修改key的值,就会重新渲染该组件 方法三:this.$for

  • Vue切换Tab动态渲染组件的操作

    使用<component :is="组件名"></component> 结合Element-UI的导航菜单 : UI组件 el-menu-item里的index写对应的组件名 点击事件@select="handleSelect" <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal&quo

  • vue实现动态表单动态渲染组件的方式(2)

    本文实例为大家分享了vue实现动态表单动态渲染组件的方式,供大家参考,具体内容如下 思路 先把所有可能出现的表单/组件写在主页面 每个表单/组件的slot 属性值要与后端返回的表单/组件类型匹配 根据后端返回的数据,动态生成一个slot列表,slot的name属性要与数据的类型匹配,此列表放入一个子组件 在主页面引入子组件,把之前主页面写好的各个表单/组件放入子组件标签中,通过匹配slot插槽去渲染组件,没有匹配到插槽的则不会渲染 案例 //主页面 <template>     <el-

  • vue实现动态表单动态渲染组件的方式(1)

    vue 实现动态表单/动态渲染组件的方式(一),供大家参考,具体内容如下 思路 先写好各个可能会出现的表单或者自定义的组件,引入. 此时后端可能会给到一个对象型数组,每个对象有要渲染组件的一个类型标识 利用component is 动态组件,根据不同的组件类型标识,渲染展示不同的组件 在利用组件的数据通信去收集各个子组件的数据 实现demo 三个表单组件,用了element-ui 此处用了自定义组件的v-model来收集子组件的数据 //InputComponent.vue  要渲染的子组件 <

  • Vue中关于重新渲染组件的方法及总结

    目录 重新渲染组件的方法总结 重新加载整个页面 使用forceUpdate 总结 重新渲染组件的方法总结 有时Vue的反应性系统还不够,您只需要重新渲染组件即可. 重新渲染组件有以下几个办法: 可怕的方法:重新加载整个页面 可怕的方法:使用v-if 更好的方法:使用Vue的内置forceUpdate方法 最好的方法:在组件上进行key更改 重新加载整个页面 非常不建议这样做,我们来看下一个办法 v-if指令,该指令仅在组件为true时才渲染. 如果为false,则该组件在DOM中不存在. 下面我

  • v-html渲染组件问题

    由于前面对html进行过解析,今天想用vue拖拽,实现一手类似快站那种自动生成代码,结果就遇到了拖拽组件过去怎么无法解析的问题,因为vue的v-html为了防止xss攻击只能解析html 思路 先实现简单页面 分三块左中右,左边是需要拖动的组件,中间是用于组件排列显示,右边是解析出的代码 左边组件列表代码 <div ref="test" > <one-component :title="title[0]" element="<el-

  • 详解Vue.js3.0 组件是如何渲染为DOM的

    本文主要是讲述 Vue.js 3.0 中一个组件是如何转变为页面中真实 DOM 节点的.对于任何一个基于 Vue.js 的应用来说,一切的故事都要从应用初始化「根组件(通常会命名为 APP)挂载到 HTML 页面 DOM 节点(根组件容器)上」说起.所以,我们可以从应用的根组件为切入点. 主线思路:聚焦于一个组件是如何转变为 DOM 的. 辅助思路: 涉及到源代码的地方,需要明确标记源码所在文件,同时将 TS 简化为 JS 以便于直观理解 思路每前进一步要能够得出结论 尽量总结归纳出流程图 应用

  • Vue强制组件重新渲染的方法讨论

    有时候,依赖 Vue 响应方式来更新数据是不够的,相反,我们需要手动重新渲染组件来更新数据.或者,我们可能只想抛开当前的DOM,重新开始.那么,如何让Vue以正确的方式重新呈现组件呢? 强制 Vue 重新渲染组件的最佳方法是在组件上设置:key. 当我们需要重新渲染组件时,只需更 key 的值,Vue 就会重新渲染组件. 这是一个非常简单的解决方案. 当然,你可能会对其他方式会更感兴趣: 简单粗暴的方式:重新加载整个页面 不妥的方式:使用 v-if 较好的方法:使用Vue的内置forceUpda

随机推荐