element vue 获取select 的label_Vue动态组件component的深度使用
背景介绍
最近在封装一些基于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的深度使用相关推荐
- element vue 获取select 的label_vue+elementui实现省市区三级联动
老大喊你起来营业了 醒醒,打工人!开始工作了,今天讲讲我的踩坑记录吧! 这次我们用的是vue-admin-webapp,基于 vue 和 element-ui 采用了最新的前端技术栈来开发一个管理系统 ...
- Vue基础学习笔记Day06_动态组件_插槽_自定义指令
今日目标: 能够了解组件进阶知识 能够掌握自定义指令创建和使用 学习内容: 学习目录: 组件进阶 自定义指令 今日总结 面试题 知识点自测 组件创建, 注册和使用 - 伸手就来特别熟练 指令的作用 1 ...
- [vue] 你有使用过动态组件吗?说说你对它的理解
[vue] 你有使用过动态组件吗?说说你对它的理解 通过 Vue 的 元素加一个特殊的 is 特性来实现 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨 ...
- vue内置动态组件component使用详解
1 动态组件介绍 component是vue内置组件,主要作用为动态渲染组件,基本用法如下: <!-- 动态组件由 vm 实例的 `componentName` property 控制 --&g ...
- vue 获取当前路由_VUE 在组件中 获取 路由信息
一.核心代码 1.获取参数 this.$route.query.id this.$route.query 2.页面跳转 登录 3.方法跳转 this.$router.push({ path: '/lo ...
- 修改element UI的select下拉框组件右边的小箭头(使用自定义图片)
i.el-select__caret {/*很关键:将默认的select选择框样式清除*/ appearance:none;-moz-appearance:none;-webkit-appearanc ...
- 动态组件component
通过使用保留的 <component> 组件,动态地绑定到它的 is 属性,我们让多个组件可以使用同一个挂载点,并动态切换,多组件之间实现tab切换. <component v-bi ...
- 【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
目录 一.前言 完整内容请关注: 二.父组件给子组件传递数据 1.使用props属性,父组件向子组件传递数据 1.使用组件的props属性 2.向cmessage对象传值 2. props属性使用 1 ...
- 【Vue.js】892- Vue 3.0 进阶之动态组件探秘
本文是 Vue 3.0 进阶系列 的第四篇文章,在这篇文章中,阿宝哥将介绍 Vue 3 中的内置组件 -- component,该组件的作用是渲染一个 "元组件" 为动态组件.如果 ...
最新文章
- mongoose笔记
- 怪不的软件开发这么挣钱,原来是有这么多职位
- C++11 并发指南三(std::mutex 详解)
- ios12关闭设置角标_iOS 12.4.2为停产的设备带来了安全修复程序
- ggsci | ggplot2的颜色标度拓展包(1):科研配色风格
- 组策略不让你登陆你怎么办
- python note 25 约束
- 博客访问量,有没有可能是系统所为?
- 电子技术基础数字部分第六版_知识速递 | 数字电子技术基础知识要点
- 蓝桥杯官网练习系统入门训练(一)
- koa2 请求转发实现
- Dell 服务器开启虚拟化功能Intel VT-x
- 零基础怎么学习平面设计
- Python+appium+GUI界面pyside2微信自动加好友(改问候语、备注、标签)
- keil软件仿真时如何使用逻辑分析仪查看波形
- 为什么苹果要出7寸的iPad mini?
- wincc做皮带动画_WINCC中制作管道流体流动动画的一种方法
- Echarts真正态分布图
- C语言-文件操作-文件打开方式
- 高级硬件工程师是怎样炼成的