微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vue 动态插入渲染html

<template>
  <div>
    <el-row type="flex" justify="center">
      <el-col :span="16">
        <el-card>
          <el-form :v-model="form" ref="form" :rules="rule" label-width="100px">
            <el-form-item label="newHtml" prop="newHtml">
              <el-input v-model="form.newHtml" type="input"/>
            </el-form-item>
            <el-form-item label="newTemplate" prop="newTemplate">
              <el-input v-model="form.newTemplate" type="textarea" :rows="10"/>
            </el-form-item>
          </el-form>
        </el-card>
      </el-col>
    </el-row>
    <el-row type="flex" justify="center">
      <el-col :span="16">
        <el-card header=newHtml class="vhtml-area">
          <div v-html="form.newHtml">
            <span class="html-class">old word</span>
          </div>
        </el-card>
        <el-card header=newTemplate class="vhtml-area">
          <div id="demo">
            <!-- <div v-for="item in data" :key="item.name">
              <div>
                <span>{{ item.name }}</span>
                <span>{{ item.age }}</span>
                <span>{{ item.favorite }}</span>
              </div>
            </div>-->
          </div>
        </el-card>
      </el-col>
    </el-row>
  </div>
</template>
<script>
import Vue from "vue";
export default {
  name: "HelloWorld",data() {
    var check = (rule,value,callback) => {
      this.change();
    };
    return {
      form: {
        newHtml: ‘‘,newTemplate: `1`
      },rule: {
        newTemplate: [{ validator: check,trigger: "change" }],}
    
    };
  },methods: {
    change() {
      var MyComponent = Vue.extend({
        template: `<div>${this.form.newTemplate}</div>`,data() {
          return {
            data: [
              {
                name: "张三",age: "18",favorite: "sleep"
              },{
                name: "李四",age: "20",favorite: "football"
              },{
                name: "王二",age: "30",favorite: "eating"
              },{
                name: "麻子",age: "40",favorite: "honghong"
              }
            ]
          };
        }
      });
      var component = new MyComponent().$mount();
      var dom = document.querySelector("#demo");
      while (dom.hasChildNodes()) {
        dom.removeChild(dom.firstChild);
      }
      dom.appendChild(component.$el);
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.vhtml-area {
  min-height: 200px;
  margin-top: 20px;
}
.html-class{
  color: red;
}
</style>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐