资讯专栏INFORMATION COLUMN

Vue.js 组件库事件系统设计

yzd / 2512人阅读

摘要:我们拿为例是指令的简写,用来绑定事件监听器我们使用组件的时候,会注册了一个自定义的事件在组件内部触发的方式也很简单调用了来触发当前实例上的事件,事件名为那思路来了,如果外层嵌套在了某一个组件里面,事件之间的互相调用也是类似的,只

我们拿 input-number 为例:

@v-on 指令的简写,用来绑定事件监听器


我们使用组件的时候,会注册了一个自定义的事件:

methods: {
    change (v) {
        console.log(v)
    }
}

在组件内部触发的方式也很简单:

调用了 $emit 来触发当前实例上的事件,事件名为 on-change
this.$emit("on-change", val);

那思路来了,如果 InputNumber 外层嵌套在了某一个 FormItem 组件里面,事件之间的互相调用也是类似的,只是多了个假设:

嵌套关系,可能有多级父子

elementiview 多设计了一个 mixins,里面提供了一个方法:dispatch

它接受 3 个参数:

componentName 组件名

eventName 自定义事件名称

params 事件传递的参数

dispatch(componentName, eventName, params) {
}

比如类似 input-number,很多这种表单内嵌的组件,都会设计和 FormItem 的互动:

this.dispatch("FormItem", "on-form-change", val);

我们在设计 FormItem组件的时候,注意:

export default {
    name: "FormItem"
}

然后注册一个自定义事件,方式也是一样的:


我们来看一下 dispatch 函数的内部:

思路是一层一层往上找父元素:

$parent -- 父实例

$root -- 组件树的根 Vue 实例

var parent = this.$parent || this.$root;

获取父组件的 name:

var name = parent.$options.name;

开始循环判断:

while (parent && (!name || name !== componentName)) {
    // ...
}

比如上面的input-number 内部调用了 dispatch,传入了参数,就是一直找父元素 nameFormItem

在 while 的内部:

接着找它的父示例,然后获取 name

parent = parent.$parent;
if (parent) {
    name = parent.$options.name;
}

最终如果找到了:

和最开始触发自定义事件是一样的:$emit

if (parent) {
    parent.$emit.apply(parent, [eventName].concat(params));
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97639.html

相关文章

  • 少女风vue组件制作全攻略~~

    摘要:组件监听自定义事件。组件触发自定义事件。生命周期钩子函数,后组件的所有的事件监听器会被移除。技术点总结组件设计的思想包括单数据流事件中心,核心是组件通信。完善给弹出日期面板和关闭日期面板增加组件自定义事件即调用触发和事件。预览 组件库官网 github地址 如果喜欢各位小哥哥小姐姐给个小星星鼓励一下哈, 请勿在生产环境中使用,供学习&交流~~ showImg(https://user...

    springDevBird 评论0 收藏0
  • 前端开发知识点整理

    摘要:前言本文主要是有关前端方面知识按照目前的认知进行的收集归类概括和整理,涵盖前端理论与前端实践两方面。 前言:本文主要是有关前端方面知识按照 XX 目前的认知进行的收集、归类、概括和整理,涵盖『前端理论』与『前端实践』两方面。本文会告诉你前端需要了解的知识大致有什么,看上去有很多,但具体你要学什么,还是要 follow your heart & follow your BOSS。 初衷...

    Blackjun 评论0 收藏0
  • 前端开发知识点整理

    摘要:前言本文主要是有关前端方面知识按照目前的认知进行的收集归类概括和整理,涵盖前端理论与前端实践两方面。 前言:本文主要是有关前端方面知识按照 XX 目前的认知进行的收集、归类、概括和整理,涵盖『前端理论』与『前端实践』两方面。本文会告诉你前端需要了解的知识大致有什么,看上去有很多,但具体你要学什么,还是要 follow your heart & follow your BOSS。 初衷...

    Sike 评论0 收藏0
  • 前端开发知识点整理

    摘要:前言本文主要是有关前端方面知识按照目前的认知进行的收集归类概括和整理,涵盖前端理论与前端实践两方面。 前言:本文主要是有关前端方面知识按照 XX 目前的认知进行的收集、归类、概括和整理,涵盖『前端理论』与『前端实践』两方面。本文会告诉你前端需要了解的知识大致有什么,看上去有很多,但具体你要学什么,还是要 follow your heart & follow your BOSS。 初衷...

    tracy 评论0 收藏0
  • VUE

    摘要:注意指令前面需要加,对指令传递数据赋值使用例如约定速成加上,表示自定义指令不要使用驼峰式命名。需要通过方法实现自定义指令注册完成。 vue Vue.js 构建数据驱动的web界面库。集中实现MVVM 的 VM层。容易与其他库或项目整合 通过尽可能简单的API实现相应的数据绑定和组合的视图组件核心:相应的数据绑定系统, 数据与DOM保持同步数据驱动的视图,普通的HTML模板中使用特殊的语...

    bergwhite 评论0 收藏0

发表评论

0条评论

yzd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<