广告
返回顶部
首页 > 资讯 > 精选 >Vue怎么实现自定义组件自动生成
  • 286
分享到

Vue怎么实现自定义组件自动生成

2023-07-04 15:07:02 286人浏览 独家记忆
摘要

本文小编为大家详细介绍“Vue怎么实现自定义组件自动生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么实现自定义组件自动生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。就目前三大前端主流数据驱动框架

本文小编为大家详细介绍“Vue怎么实现自定义组件自动生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么实现自定义组件自动生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

就目前三大前端主流数据驱动框架(vue,ng,React)而言,均具有创建自定义组件的api,但都是必须先做到事先写好挂载点,这个挂载点可以是原有静态元素标签也可以是自定义模板;对于多种组件通过同一数据流生成的,如果事先在页面上写好挂载点(mounted),然后通过dom操作去动态添加,会遇到类似这样一条错误提示信息:Failed to execute 'appendChild' on 'node': parameter 1 is not of type 'Node'.(…)。这又是为何呢,下一步该怎么办?

原因是任何dom操作的对象必须是符合W3C标准的元素,除非如下所述的,改写生成html元素对象的原型(HTMLElement.prototype)并注册自定义元素,从而实现动态生成自定义组件的效果。

代码:

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <meta Http-equiv="Content-type" content="text/html,charset=utf-8"/>  <meta http-equiv="X-UA-Compatible" content="IE-edge">  <meta name="viewport" content="width=device-width,initial-scale=1">  <link href="CSS/mui.min.css" rel="stylesheet">  <link href="css/app.css" rel="stylesheet">  <script src="js/vue.js" type="text/javascript"></script></head><body><div id="main" class="mui-content"></div></body><script src="js/fuhao-components.js" type="text/javascript"></script><script>  var JSONData = [    {      "keyname": "姓名鄂然失色而热重重中之重重中之重杂志的热热",      "type": "text",      "key": "name11"    }, {      "value": "姓名鄂之重杂志的热热",      "key": "name11"    }, {      "keyname": "姓名鄂然失色而热热热热是重中之重重中之重重中之重杂志的热热",    },    {      "keyname": "姓名鄂然失色而热热热热是重中之重重中之重重中之重杂志的热热",      "type": "textarea",      "key": "name"    },    {      "keyname": "性别",      "type": "radio",      "key": "sex",      "values": [        {          "key": "man",          "value": "男辅导班"        },        {          "key": "women",          "value": "女"        }      ]    },    {      "keyname": "复选",      "type": "checkbox",      "key": "checkbox",      "values": [        {          "key": "man",          "value": "男"        },        {          "key": "women",          "value": "女"        }      ]    },    {      "keyname": "类型",      "type": "select",      "key": "type1",      "values": [        {          "key": "type1",          "value": "类型1"        },        {          "key": "type2",          "value": "类型2"        },        {          "key": "type3",          "value": "类型3"        },        {          "key": "type4",          "value": "类型4"        }      ]    },    {      "keyname": "定位",      "type": "gps",      "key": "btn",      "value": "地图获取定位"    },    {      "keyname": "拍照",      "type": "photo",      "key": "btn",      "value": "拍照"    }  ];  (function () {    AnalyJson(jsonData);  })();  function AnalyJson(data) {    if ('id' in data) {      arguments.callee(data.values);    } else {      if ('name' in data) {        htmlname = data.name;        CreateInputViewer(data.name);        arguments.callee(data.values);      } else {        if ('type' in data) {          CreateInputViewer(data);        } else {          for (var p in data) {            CreateInputViewer(data[p]);          }        }      }    }  }  function CreateInputViewer(data) {    switch (data.type) {      case 'text': {        fh_C(data, 'c-input-text' + '-' + data.key, 'fhInputText', textTpl);        break;      }      case 'textarea': {        fh_C(data, 'c-textarea' + '-' + data.key, 'fhInputTextarea', textareaTpl);        break;      }      case 'radio': {        fh_C(data, 'c-input-radio' + '-' + data.key, 'fhInputTextarea', radioTpl);        break;      }      case 'checkbox': {        fh_C(data, 'c-input-checkbox' + '-' + data.key, 'fhInputCheckbox', checkboxTpl);        break;      }      case 'select': {        fh_C(data, 'c-select' + '-' + data.key, 'fhSelect', selectTpl);        break;      }      case 'photo': {        fh_C(data, 'c-photo' + '-' + data.key, 'fhPhoto', photoTpl);        break;      }      case 'gps': {        fh_C(data, 'c-gps' + '-' + data.key, 'fhGPS', gpsTpl);        break;      }      default: {        fh_C(data, 'c-default' + '-' + data.key, 'fhInputDefault', defaultTpl);        break;      }    }  }  function fh_C(d, c, cn, tpl) {    console.log(d);    Vue.component(c, {      template: tpl,//       props:['key','keyname','values','value'],      data: function () {        return d      }    });    new Vue({      el: '.mui-content',      components: {        cn: cn      },    });    var MyElementProto = Object.create(HTMLElement.prototype);    MyElementProto.createdCallback = function () {      this.innerHTML = tpl    };    var MyComponent = document.reGISterElement(c, {prototype: MyElementProto});    document.querySelector('.mui-content').appendChild(new MyComponent());  }</script></html>

为了保持代码的可维护性及易读性,我将模板部分单独放在fuhao-components.js的文件里边,如下所示:

var textTpl='';<div class="mui-content-padded">  <input :type="type" :name="key" :placeholder="keyname" ></div>  var textareaTpl= '';<div class="mui-content-padded ">  <textarea rows="5" :placeholder="keyname">   </textarea></div>  var radioTpl= '';<fORM class="mui-input-group mui-content-padded">    <div class="mui-input-row mui-radio mui-left"v-for="value in values">      <label>{{value.key}}</label>      <input :name="key" :type="type" :value="key">    </div></form>var checkboxTpl= '';<form class="mui-input-group mui-content-padded">    <div class="mui-input-row mui-checkbox mui-left"v-for="value in values">      <label>{{value.key}}</label>      <input :name="key" :type="type" :value="key">    </div></form>var selectTpl= '';  <div class="mui-content-padded">  <h6 class="mui-content-padded" v-text="keyname"></h6>    <select class="mui-btn mui-btn-block " :name="key">      <option value="key" v-text="value.key" v-for="value in values">{{value.key}}</option>    </select>  </div>var photoTpl= '';<div class="mui-content-padded">  <span v-text="keyname"></span>  <button :name="key" onclick="takePhoto(this.name)" class="mui-btn mui-btn-primary">拍照</button>   <img :id="key" height="70" width="100" class="img-rounded"></div>  var gpsTpl='';<div class="mui-content col-xs-12">  <button class="mui-btn mui-btn-primary" :id="key" onclick="takeLocation(this.id)">  获取定位  </button></div>  var defaultTpl= '';<div class="mui-content-padded " v-if="key">  <ul class="mui-table-view">    <li class="mui-table-view-cell mui-media">      <span class="fuhaoKey" v-text="key"></span>      <span class="fuhaoValue" v-text="value"></span>    </li>  </ul ></div>

Vue的优点

Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和dom,可以大大提升访问速度和用户体验。

读到这里,这篇“Vue怎么实现自定义组件自动生成”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Vue怎么实现自定义组件自动生成

本文链接: https://www.lsjlt.com/news/345852.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue怎么实现自定义组件自动生成
    本文小编为大家详细介绍“Vue怎么实现自定义组件自动生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么实现自定义组件自动生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。就目前三大前端主流数据驱动框架...
    99+
    2023-07-04
  • Vue结合原生js如何实现自定义组件自动生成
    这篇文章主要介绍Vue结合原生js如何实现自定义组件自动生成,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!就目前三大前端主流数据驱动框架(vue,ng,react)而言,均具有创建自...
    99+
    2022-10-19
  • Vue中怎么自定义动态组件
    Vue中怎么自定义动态组件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。举第一个栗子用vue-cli搭建好项目目录之后,在src/compon...
    99+
    2022-10-19
  • 怎么通过yarn自动生成vue组件
    这篇文章主要介绍“怎么通过yarn自动生成vue组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么通过yarn自动生成vue组件”文章能帮助大家解决问题。实践步骤安装一下chalk,这个插件能让...
    99+
    2023-07-04
  • 如何生成vue自定义组件和嵌套表单组件
    本篇内容介绍了“如何生成vue自定义组件和嵌套表单组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用form-create动态生成vue...
    99+
    2023-07-04
  • vue怎么自定义keepalive组件
    本文小编为大家详细介绍“vue怎么自定义keepalive组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么自定义keepalive组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。为什么会出现这种情...
    99+
    2023-07-02
  • vue自定义组件怎么添加使用原生事件
    今天小编给大家分享一下vue自定义组件怎么添加使用原生事件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。自定义组件如何添加使...
    99+
    2023-06-30
  • vue递归实现自定义tree组件
    本文实例为大家分享了vue递归实现自定义tree组件的具体代码,供大家参考,具体内容如下 1. 在tree/index.vue中: <template> <...
    99+
    2022-11-12
  • 如何使用form-create动态生成vue自定义组件和嵌套表单组件
    这篇文章主要介绍了如何使用form-create动态生成vue自定义组件和嵌套表单组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用fo...
    99+
    2022-10-19
  • vue中怎么自定义全局组件
    这期内容当中小编将会给大家带来有关vue中怎么自定义全局组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Vue.use( plugin ):安装 Vue.js 插件。如...
    99+
    2022-10-19
  • vue怎么自定义封装API组件
    这篇文章主要介绍vue怎么自定义封装API组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自定义封装API组件1.创建vue组件<template>    <...
    99+
    2023-06-29
  • Android自定义组件:2、如何实现和使用自定义组件、自定义属性
    声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!! 目录 一、前言 二、如何实现自定义组件 步骤1:写 attrs.xml 资源文件 1、...
    99+
    2022-06-06
    属性 自定义属性 Android
  • VUE自定义取色器组件的实现
    本文主要介绍了VUE 自定义取色器组件的实现,分享给大家,具体如下: 效果: 功能: 1。点击色块中任何一点,色块中的正方形显示该点的颜色。 2。点击色块上方的颜色圆点,色块选中该...
    99+
    2022-11-12
  • vue2 中怎么自定义动态组件
    vue2 中怎么自定义动态组件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 Vue.extend 思路就是拿到组件的构造...
    99+
    2022-10-19
  • vue实现自定义组件挂载原型上
    目录自定义组件挂载原型上以elementUI二次分装dialog举例在原型上挂载方法和组件挂在方法,在main.js中挂载组件自定义组件挂载原型上 以elementUI二次分装dia...
    99+
    2022-11-13
    vue自定义组件 vue挂载原型 vue组件挂载原型上
  • Vue自定义Form组件实现方法介绍
    目录1. 需求分析2. 表单功能的简单实现3. 抽象验证规则4. 支持 v-model 双向绑定5. 使用 $attrs 支持默认属性6. 父组件调用子组件中的方法1. 需求分析 我...
    99+
    2022-11-13
    Vue自定义Form组件 Vue Form组件 Vue Form
  • 怎么实现Vue 自定义组件中hover事件以及 v-model
    这期内容当中小编将会给大家带来有关怎么实现Vue 自定义组件中hover事件以及 v-model,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在CSS中,很容易在鼠标ho...
    99+
    2022-10-19
  • vue怎么自定义开发滑动图片验证组件
    这篇文章主要介绍了vue怎么自定义开发滑动图片验证组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue怎么自定义开发滑动图片验证组件文章都会有所收获,下面我们一起来看看吧。纯前端,通过canvas来自定义开...
    99+
    2023-06-29
  • vue自定义动态组件的方法是什么
    本篇内容主要讲解“vue自定义动态组件的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue自定义动态组件的方法是什么”吧! Vue.extend 思路就是拿到组件...
    99+
    2023-07-04
  • Android 自定义组件成JAR包的实现方法
    Android 自定义组件成JAR包的实现方法,这里对自己实现的Android View 组件进行JAR 包的处理。      ...
    99+
    2022-06-06
    自定义 jar 方法 jar包 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作