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 相关文章推荐
JS清空多文本框、文本域示例代码
Feb 24 Javascript
javascript使用smipleChart实现简单图表
Jan 02 Javascript
javascript动态创建表格及添加数据实例详解
May 13 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
jQuery实现div横向拖拽排序的简单实例
Jul 13 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
vue 获取视频时长的实例代码
Aug 20 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 Javascript
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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
使用K.function()调试keras操作
2020/06/17 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
泰国第一在线超市:Tops
2021/02/13 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
毕业自我评价范文
2013/11/17 职场文书
市场营销个人求职信范文
2014/02/02 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
python某漫画app逆向
2021/03/31 Python
redis连接被拒绝的解决方案
2021/04/12 Redis