VUE 自定义组件模板的方法详解


Posted in Javascript onAugust 30, 2019

本文实例讲述了VUE 自定义组件模板的方法。分享给大家供大家参考,具体如下:

先说下需求吧,因为客户的用户群比较大,如果需求变动,频繁更新版本就需要重新开发和重新发布,影响用户的体验,考虑到这一层就想到,页面展示效果做动态可配,需求更新时,重新配置一份模板录入到数据库,然后根据用户选择的模板进行展示。

关于页面展示做的动态可配,我是参考vue的Component组件方式,开始时可能会遇到组件定义后不能加载的情况,并在控制台如下错误:You are using the runtime-only build of Vue where the template compiler is not available.......解决办法,如下图文件中添加 'vue$': 'vue/dist/vue.esm.js', 即可,具体原因自行百度吧。

VUE 自定义组件模板的方法详解

开始上代码:

1.最初版本的代码,这个是刚开始的时候测试一些想法

<template>
  <div >
   <ai-panel :testData="testData"></ai-panel>
  </div>
</template>
<script>
export default {
 data(){
    return {
     testData:{name:"李四"}
    }
  }
  ,components: { // 自定义组件
   aiPanel: {
    name: 'aiPanel',
    template: '<span>{{testData.name}}</span>',
    props: ['testData']//用作接收父级组件传递的参数 :testData="testData" 即可
    //这里还可以继续定义 子组件的 data,methods等
   }
  }
}
</script>

通过测试发现一些地方并不能自由的控制,例如后台传过来的html语句并不能很好的放入到子组件的template中,然后又根据vue的api重新优化了一版,如下

1.首先创建一个工具类 的js文件,js中添加如下代码

import Vue from 'vue'//引入vue
export function doComponents(opt){
 //opt 调用时传入 可以包含template的html语句,data中需要绑定的数据等
 let billItem = opt.billItem
 let billHtml =opt.billHtml;
 const myComponent = Vue.extend({
  template: billHtml,
  data() {
    return {
      billItem:billItem
    }
  },
  methods: {// 子模板中自定义事件
  }
 })
 // $mount(id)通过查找页面id手动挂载到页面
 new myComponent().$mount("#testTemplate")
}

2.页面代码如下

<template>
  <div>
     <div class="card main-form">
<!-- ai-btn是我自定义的按钮,大佬们可以换成element组件的按钮哈 -->
       <ai-btn title="查询" icon="el-icon-search" lcss="btn-org" @onClick="query"/>
     </div>
   <div ref="testTemplate" id="testTemplate">
   </div>
  </div>
</template>
<script>
import * as temp from "@/api/myTemplate";//上面 定义的js文件
export default {
 data(){
  return {
      billItem:{name:"测试"},
      billHtml:'<div class="org">{{billItem.name}}</div>',
    }
  },
  methods:{
    noResponse(){
     alert("系统升级中,暂时无法提供查询!");
    },
    query: function() {
      this.$http.post('/billing/qcdr/qryBillInfo').then((res)=> {
      //如果后台接口有数据可以 从res获取后台数据,我这里就直接用页面的测试数据了
       let option = {
         "billHtml":this.billHtml,
         "billItem":this.billItem
        }
       temp.doComponents(option);//加载模板
      }, (error)=>{
       this.$message.error("系统繁忙");
      })
    }
  }
}
</script>

这样每次查询都可以根据后台的返回的html重新生成页面 这样可以做到只需要搭建一次框架,后期可以根据客户的需求,重新配置模板,将模板中的html保存到数据库,通过指定模板展示,页面查询时,获取对应模板即可展示。

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
JavaScript中的Location地址对象
Jan 16 Javascript
javascript最常用与实用的创建类的代码
Aug 12 Javascript
Javascript单元测试框架QUnitjs详细介绍
May 08 Javascript
Node.js文件操作方法汇总
Mar 22 Javascript
Javascript之深入浅出prototype
Feb 06 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
你或许不知道的一些npm实用技巧
Jul 04 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
Jquery动态列功能完整实例
Aug 30 #jQuery
vue 兄弟组件的信息传递的方法实例详解
Aug 30 #Javascript
微信小程序sessionid不一致问题解决
Aug 30 #Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 #Javascript
Vue函数式组件的应用实例详解
Aug 30 #Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 #Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 #Javascript
You might like
使用PHP Socket写的POP3类
2013/10/30 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
django 环境变量配置过程详解
2019/08/06 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
面试后的感谢信范文
2014/02/01 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
六年级情感作文之500字
2019/10/23 职场文书
php中pcntl_fork详解
2021/04/01 PHP
Python基础 括号()[]{}的详解
2021/11/07 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python