vue如何像Element那样封装组件

简介: 用过 vue 的应该都知道 element ,因为确实是 vue ui 组件中做的非常不错的,里面的组件封装也比较值得学习。

用过 vue 的应该都知道 element ,因为确实是 vue ui 组件中做的非常不错的,里面的组件封装也比较值得学习。

前不久我发过一篇如何合法的在子组件中改变父组件的值,从而实现自定义组件的文章,但是里面用到了 TypeScript ,所以写法上和普通的不使用 TypeScript 的项目有很大差别,这里整理一下最简单的 vue 环境该怎么封装。

其实官网里有如何封装的描述,链接在这里 => 使用自定义事件的表单输入组件

而 element 中也是使用这种方法实现的。

首先我们看一下实现后的效果是怎么样的。

// 例如我们封装一个 switch 组件
<lw-switch 
v-model="val" 
:disabled="disable"
selectedVal="yes"
unSelectedVal="no"
:size="25"
@changeStart="changeStart"
@changeEnd="changeEnd"/>

// 然后在 vue 实例中绑定值

data () {
   return {
     // Switch
     val: false,
     disable: false,
   }
 },

// 这时我们点击 switch 组件后就可以在子组件内部改变父组件 v-model 绑定的值了。
// 而我们直接在子组件改变父组件的值 vue 是会报错的。

这里需要一些技巧

// 首先处理父组件 v-model 传入的值

props: {
  value: {
     // 绑定的值
     type: [Number, String, Boolean],
     default: true
   },
}

// 然后在子组件中添加一个 input 元素,并绑定上面的 value 
// 这里是核心
// input 事件需要绑定一个处理函数,在下面会贴出
 <input 
 ref="input"
 :value="value" 
 @input="_changeValue" 
 style="display: none;"/>

// 然后当我们在子组件触发某些事件后,需要去改变 value 的值

<div @click="_tapSwitch"></div>

// 处理函数
methods: {
    _tapSwitch() {
        // 这里触发事件后,手动执行 input 上面绑定的函数,并传入参数
       this._changeValue(false)
    },

    _changeValue(value) {
      // 这里手动触发一下 input 事件,并且把值传进去
      this.$emit('input', value)

      // 还可以向父组件传递自定义事件
      this.$emit('changeEnd', value)
    }
  },
// 然后就成功绑定了

最后放一个我在 GitHub 上封装的 switch 组件,可以去参考一下。

Vue Switch组件

原文地址: http://blog.csdn.net/qq_25243451/article/details/78934147

目录
相关文章
|
2天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
12 3
|
5天前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
40 6
|
2天前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
5 2
|
2天前
|
JavaScript 搜索推荐 UED
vue的自定义指令
【10月更文挑战第14天】Vue 自定义指令为我们提供了一种强大的工具,使我们能够更灵活地控制和扩展 Vue 应用的行为。通过合理地使用自定义指令,可以提高开发效率,增强应用的功能和用户体验。
|
3天前
|
JavaScript
|
5天前
|
缓存 JavaScript 前端开发
Vue 中动态导入的注意事项
【10月更文挑战第12天】 在 Vue 项目中,动态导入是一种常用的按需加载模块的技术,可以提升应用性能和效率。本文详细探讨了动态导入的基本原理及注意事项,包括模块路径的正确性、依赖关系、加载时机、错误处理、缓存问题和兼容性等,并通过具体案例分析和解决方案,帮助开发者更好地应用动态导入技术。
|
5天前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
4天前
|
JavaScript UED
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
【10月更文挑战第5天】本示例展示了如何在 Vue.js 中使用 Element UI 组件实现动态添加和删除嵌套表单项。该表单包含设备信息、设备部位及其对应的任务列表,支持用户动态添加设备部位和任务,并提供相应的表单验证规则。
24 0
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
|
5天前
|
JavaScript
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
11 1
|
1天前
|
JavaScript 前端开发 Java
vue2知识点:Vue封装的过度与动画
vue2知识点:Vue封装的过度与动画
7 0