背景介绍

最近在封装一些基于Vue+ElementUI的组件,将一些实际项目中常用的,有一定规律的业务进行抽象总结,开发出相应的Vue组件。

组件封装

首先想到的就是Form组件,在Element UI提供的Form中,我们需要一个一个的去添加对用的FormItem

<el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="form.name">el-input>el-form-item><el-form-item label="活动区域"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai">el-option><el-option label="区域二" value="beijing">el-option>el-select>el-form-item>el-form>

可以发现,每个FormItem的结构都是一样的,只是其中包含的组件不一样。这样,我们就可以通过封装组件的方式,将代码简化,

<el-form ref="form" :model="form" label-width="80px"><my-form-itemlabel="活动名称"v-model="form.name"widget="input">my-form-item><my-form-item label="活动区域" v-model="form.region" placeholder="请选择活动区域"widget="select":options="options">my-form-item>el-form>

**my-form-item.vue **0.1版如下

  <el-form-item :label="title"><el-select v-if="widget === 'select'" v-model="form[path]" :clearable="true"><el-option v-for="option in options" :key="option.code" :label="option.name" :value="option.code">el-option>el-select><el-input v-else-if="widget === 'input'" v-model="form[path]" :clearable="true">el-input>el-form-item>

0.1版,直接使用了v-if来处理widget类型,此时,input和select的逻辑耦合在了一起,再需要其他的组件类型时,这个文件结构会很复杂。

Vue动态组件

在Vue中,提供了动态组件component,它可以在动态的选择加载那个组件。
例子:

<template><div class="home"><img alt="Vue logo" src="../assets/logo.png" />

<a href="#" @click="current = 'hello-world'">Hello Worlda><a href="#" @click="current = 'hello-world2'">Hello 2a><component :is="current" :msg="current" @clicked="handleClicked">component>div>template>

<script>// @ is an alias to /srcimport HelloWorld from '../components/HelloWorld.vue';import HelloWorld2 from '../components/HelloWorld2';export default {name: 'Home',components: {    HelloWorld,    HelloWorld2  },  data() {return {current: 'hello-world'    };  },methods: {    handleClicked(e) {      alert(e);    }  }};

在component中 :is 属性是必须的,它的内容为在template中使用的组件标签。通过 :is 内容的切换就可以动态的渲染和组件了。

改造组件

my-form-item.vue

  <componentv-if="widgetType":is="currentWidget"v-model="form[path]"v-bind="$props":label="title":property="mProperty"  >component>

my-input.vue

<template><el-form-item :label="label"><el-input :value="value" @input="handleInput">el-input>el-form-item>template>

my-select.vue

<template><el-form-item :label="label"><el-select :value="value" :clearable="true" @input="handleInput"><el-optionv-for="option in widgetOptions":key="option.code":label="option.name":value="option.code"      >el-option>el-select>el-form-item>template>

这样input和select就分解成了两个组件,每个组件只需要关注自己的逻辑即可。如果需要扩充新的组件,只要按照规范创建一个新的组件即可。

总结

动态组件可以将props完成的传递给实际的组件,同样也可将实际组件的Emit监听到,这样参数传递的问题就解决了,使用动态组件就可以像使用实际一样,开发体验上实现零差别,代码处理逻辑实现解耦

element vue 获取select 的label_Vue动态组件component的深度使用相关推荐

  1. element vue 获取select 的label_vue+elementui实现省市区三级联动

    老大喊你起来营业了 醒醒,打工人!开始工作了,今天讲讲我的踩坑记录吧! 这次我们用的是vue-admin-webapp,基于 vue 和 element-ui 采用了最新的前端技术栈来开发一个管理系统 ...

  2. Vue基础学习笔记Day06_动态组件_插槽_自定义指令

    今日目标: 能够了解组件进阶知识 能够掌握自定义指令创建和使用 学习内容: 学习目录: 组件进阶 自定义指令 今日总结 面试题 知识点自测 组件创建, 注册和使用 - 伸手就来特别熟练 指令的作用 1 ...

  3. [vue] 你有使用过动态组件吗?说说你对它的理解

    [vue] 你有使用过动态组件吗?说说你对它的理解 通过 Vue 的 元素加一个特殊的 is 特性来实现 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨 ...

  4. vue内置动态组件component使用详解

    1 动态组件介绍 component是vue内置组件,主要作用为动态渲染组件,基本用法如下: <!-- 动态组件由 vm 实例的 `componentName` property 控制 --&g ...

  5. vue 获取当前路由_VUE 在组件中 获取 路由信息

    一.核心代码 1.获取参数 this.$route.query.id this.$route.query 2.页面跳转 登录 3.方法跳转 this.$router.push({ path: '/lo ...

  6. 修改element UI的select下拉框组件右边的小箭头(使用自定义图片)

    i.el-select__caret {/*很关键:将默认的select选择框样式清除*/ appearance:none;-moz-appearance:none;-webkit-appearanc ...

  7. 动态组件component

    通过使用保留的 <component> 组件,动态地绑定到它的 is 属性,我们让多个组件可以使用同一个挂载点,并动态切换,多组件之间实现tab切换. <component v-bi ...

  8. 【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)

    目录 一.前言 完整内容请关注: 二.父组件给子组件传递数据 1.使用props属性,父组件向子组件传递数据 1.使用组件的props属性 2.向cmessage对象传值 2. props属性使用 1 ...

  9. 【Vue.js】892- Vue 3.0 进阶之动态组件探秘

    本文是 Vue 3.0 进阶系列 的第四篇文章,在这篇文章中,阿宝哥将介绍 Vue 3 中的内置组件 -- component,该组件的作用是渲染一个 "元组件" 为动态组件.如果 ...

最新文章

  1. mongoose笔记
  2. 怪不的软件开发这么挣钱,原来是有这么多职位
  3. C++11 并发指南三(std::mutex 详解)
  4. ios12关闭设置角标_iOS 12.4.2为停产的设备带来了安全修复程序
  5. ggsci | ggplot2的颜色标度拓展包(1):科研配色风格
  6. 组策略不让你登陆你怎么办
  7. python note 25 约束
  8. 博客访问量,有没有可能是系统所为?
  9. 电子技术基础数字部分第六版_知识速递 | 数字电子技术基础知识要点
  10. 蓝桥杯官网练习系统入门训练(一)
  11. koa2 请求转发实现
  12. Dell 服务器开启虚拟化功能Intel VT-x
  13. 零基础怎么学习平面设计
  14. Python+appium+GUI界面pyside2微信自动加好友(改问候语、备注、标签)
  15. keil软件仿真时如何使用逻辑分析仪查看波形
  16. 为什么苹果要出7寸的iPad mini?
  17. wincc做皮带动画_WINCC中制作管道流体流动动画的一种方法
  18. Echarts真正态分布图
  19. C语言-文件操作-文件打开方式
  20. 高级硬件工程师是怎样炼成的

热门文章

  1. springmvc学习笔记(17)-上传图片
  2. 故障排查:是什么 导致了客户端批量心跳超时掉线
  3. libxml中用到的Xpath语法说明
  4. 设计模式系列-组合模式
  5. juniper srx解决内网不能telnet公网IP的方法
  6. C#:前台线程后台线程
  7. 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
  8. 单点登录在项目中的实现 转.
  9. redis和kafka比较
  10. linux php7 安装redis扩展(php7可以使用自测)