当前位置: 首页 > news >正文

【前端】VUE 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用

【前端】VUE2 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用

<template><div><!--      这里是动态组件--><component :is="component"></component><!--      这里是动态组件--><br /><br /><br />可以理解为是一个vue模拟器 虚拟机以上是渲染的内容, 修改以下内容会实时动态渲染上边的组件  vue代码中怎么写 这里就怎么写 当成编辑器这里用的是https://1x.antdv.com/components/input-cn/ UI库   VUE2<p>模板内容: template 中的内容</p><a-textarea  v-model="virtualTemplateStr" :rows="15" /><p>data内容:</p><a-textarea v-model="virtualDataStr" :rows="15" /><p>methods内容:</p><a-textarea v-model="virtualMethodsStr" :rows="15" /><p>other 其他内容:</p><a-textarea v-model="virtualOtherStr" :rows="15" /></div>
</template><script>//动态模板中 使用到的组件 需要提前引入
/*** 然后使用 components*  components: {*           'a-progress': AProgress, // 在动态组件中注册组件*         },*/
import Vue from 'vue';//这里如果之前全局引用过 则不用再引用
import Antd from 'ant-design-vue';
//这里如果之前全局引用过 则不用再引用
import 'ant-design-vue/dist/antd.css';Vue.use(Antd);export default {data() {return {/*** 模板内容 str形式的*/virtualTemplateStr: `<div><h1>{{消息内容}}</h1><a-button @click="changeMessage">点击改变消息内容 并打印组件相关日志F12查看控制台</a-button><a-progress :percent="30" /><a-progress :percent="50" status="active" /><a-progress :percent="70" status="exception" /><a-progress :percent="100" /><a-progress :percent="50" :show-info="false" /></div>`,/*** 虚拟组件data数据*/virtualDataStr: `{//这里this指向是当前页面的this 而不是虚拟组件的this 所以用这个可以访问当前页面的属性方法等//也可以使用 this.$parent 获取父组件this: this,消息内容: 'Hello from templateString!',//这里可以添加更多变量}`,virtualMethodsStr: `{/*** 改变消息内容*/changeMessage() {//this.speak()// this.父组件this.speak()//调用真实页面的方法  同   this.父组件this.speak()this.$parent.speak()console.info('真实页面的this:', this.$parent)console.info('当前虚拟组件页面的this:', this)// 动态导入 AProgress 组件  这里是不行的, 必须在上层VUE中引入组件 然后通过 components的方式引入// const AProgress = await import('ant-design-vue/lib/progress');this.消息内容 = '我是改变之后的消息' + new Date();},// 可以在这里添加更多的方法test(){alert('我是虚拟组件test方法')}}`,/*** 其他内容 例如**  created () {*     this.createDynamicComponent()*   },*   watch: {**   }**/virtualOtherStr: `{}`,component: null};},created() {this.createDynamicComponent()},/*** 监听*/watch: {virtualTemplateStr(newStr) {this.createDynamicComponent();},virtualDataStr(newStr) {this.createDynamicComponent();},virtualMethodsStr(newStr) {this.createDynamicComponent();},},methods: {speak(){console.log('我是真实页面的方法')},/*** 创建动态组件* @returns {any}*/async createDynamicComponent() {// 动态导入 AProgress 组件const AProgress = await import('ant-design-vue/lib/progress');//动态解析data字符串let tdata = eval('(' + this.virtualDataStr + ')');let tMethods = eval('(' + this.virtualMethodsStr + ')');let tOther = eval('(' + this.virtualOtherStr + ')');// 使用 Vue.component 创建动态组件this.component = Vue.component('dynamic-component', {//动态解析模板内容template: this.virtualTemplateStr,data() {//注入data数据return tdata},/*** 引入组件*/components: {'a-progress': AProgress.default, // 在动态组件中注册组件},methods: tMethods,...tOther});},}
};
</script>


http://www.mrgr.cn/news/3982.html

相关文章:

  • Java 入门指南:List 接口
  • Ruby在嵌入式系统:轻量级语言的灵活应用
  • 《数据分析与知识发现》
  • Python知识点:如何使用Boto3进行AWS服务管理
  • 27.CSS 伪类是什么? 屏幕外
  • 开始尝试从0写一个项目--后端(四)
  • Java面试题———热门篇①
  • fastapi+react实现第三方登录功能示例
  • Android系统和开发--安全性和权限管理 SELinux 策略 安全架构
  • Linux ssh 免密失效
  • linux:线程及其相关函数,线程的回收
  • Java语聊大厅个人厅陪玩厅陪玩系统小程序源码
  • <数据集>无人机航拍不同高度牧羊识别数据集<目标检测>
  • 数据结构——顺序栈和链式栈
  • 鸿蒙内核源码分析(重定位篇) | 与国际接轨
  • 详解Element-UI el-table表格中勾选checkbox(selection)多选删除
  • FL Studio24.1.1中文汉化版本下载 附带注册机
  • Midjourney进阶-反推与优化提示词(案例实操)
  • MongoDB如何实现大于小于查询
  • 自然语言处理(NLP)大模型