Vue自定义事件

vue中组件的自定义事件(详) 今天这篇文章,让你彻底学会组件自定义事件…… 我们在vue中用的click、keyup……等事件,这些属于内置事件,也就是js自带的事件。 问题一:什么是组件自定义事件呢? 自定义事件,顾名思义就是自己打造的事件,包含事件名,事件回调等,定义好之后去给组件使用。而内置事件是给html元素用的,比如span、div等标签,不是组件。 也是一种组件间的通信方式,适用于子组件==>父组件。这里我们通过传值去讲述自定义事件如何使用。 问题二:如何实现子组件给父组件传值? (1)复习一下props父 阅读详情

1. 事件的命名规范

组件上事件的命名推荐使用分隔符写法(** kebab-case **),如下面的add-size,因为html是大小写不敏感的,v-on后面跟的事件名都会转成小写的。用大写的会导致监听不到事件。

<div id="dynamic-component-demo" class="demo">
    <base-checkbox v-on:add-size="doSomething"></base-checkbox>
</div>

<script>
    Vue.component('base-checkbox', {
        template: `
            <button v-on:click="$emit('add-size')">按钮</button>
          `
    })
    new Vue({
        el: "#dynamic-component-demo",
        data: {
            lovingVue: true,
        },
        methods: {
            doSomething: function () {
                alert(1);
            }
        }
    });
</script>

2. 自定义组件的v-model

允许一个自定义组件在使用 v-model 时定制 prop 和 event。默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event,但是一些输入类型比如单选框和复选框按钮可能想使用 value prop 来达到不同的目的。使用 model 选项可以回避这些情况产生的冲突。

如下复选框:利用model定义了v-model把checked用作prop,把change作为event

<div id="dynamic-component-demo" class="demo">
    <base-checkbox v-model="lovingVue"></base-checkbox>
</div>

<script>
    Vue.component('base-checkbox', {
        model: {
            prop: 'checked',
            event: 'change'
        },
        props: {
            checked: Boolean
        },
        template: `
        <div>
            <input
              type="checkbox"
              v-bind:checked="checked"
              v-on:change="$emit('change', $event.target.checked)"
            >
            </div>
          `
    })
    new Vue({
        el: "#dynamic-component-demo",
        data: {
            lovingVue: true,
        }
    });
</script>

3. 将原生事件绑到组件

重点:.native修饰符的使用 和 $listeners的使用

  • 用 .native修饰符

如下代码的第10行,如果用 v-on:focus.native="focus",那么第20行的label包裹标签要去掉才有用,因为.native表示该事件直接作用于该组件的根元素上,根元素是input时,focus事件才发挥作用

  • $listeners

为了避免上述根元素变掉,导致加载组件上原生事件不起作用的问题,vue引入了$listeners,如下,第10行的.native不需要了,在组件模板中input上加上 v-on="$listeners" ,表示加在组件上的原生事件都应用在模板中input元素上。

问题解决,完美! 完整demo如下:

<div id="dynamic-component-demo" class="demo">
    <base-input
            data-date-picker="activated"
            v-bind:label="pleae"
            label2="dd"
            v-bind:value="aa"
            v-model="username"
            required
            placeholder="Enter your username"
            v-on:focus="onFocus"   // v-on:focus.native="focus" 
    ></base-input>
</div>

<script>

    Vue.component('base-input', {
        inheritAttrs: false,
        props: ['label', 'value'],
        template: `
        <label>
              {{ label }}
              <input
                v-bind="$attrs"
                v-bind:value="value"
                v-on:input="$emit('input', $event.target.value)"
                v-on="$listeners"   
              >
        </label>
          `
    })
    new Vue({
        el: "#dynamic-component-demo",
        data: {
            aa:1,
            username:'cc',
            pleae:'pleae'
        },
        methods:{
            onFocus:function () {
                console.log('focus')
            }
        }

    });

4. .sync修饰符

子组件改变父组件属性的值,实现双向数据绑定
如下代码中使用 sync修饰符,使代码由三行变成一行,更简洁。

<div id="dynamic-component-demo">
  <!--  <text-document
            v-bind:title="doc.title"
            v-on:update:title="doc.title = $event"
    ></text-document>-->

    <!-- .sync这种写法是上面写法的简写方式 -->
    <text-document v-bind:title.sync="doc.title"></text-document>
</div>

<script>
    Vue.component('text-document', {
        props: ['title'],
        template: `
            <div>
                <h1>{{title}}</h1>
                <button v-on:click="changeTitle">change title</button>
            </div>
          `
        ,
        methods: {
            changeTitle: function () {
                // 改变了父组件中title属性的值,实现了双向数据绑定
                this.$emit('update:title', 'new Title');
            }
        }
    })

    new Vue({
        el: "#dynamic-component-demo",
        data: {
            doc: {
                title: 'hello vue'
            }
        }
    });
</script>

完整demo:链接

更多Vue文档解读:《Vue Doc 笔记》

(完)

AT91SAM9260搭建LINUX操作系统 一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学 阅读详情

相关推荐

【SAP】ABAP——ALV显示后选择数据操作

在ALV显示后,可全选、全不选或者选择几条数据进行发邮件、更新、下单等等操作。 在user_command中的实现方式如下: 方式一: FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA: lt_rows TYPE lvc_t_row WITH

Mona_1220的博客 4091

Vue.js学习笔记:属性绑定 v-bind

v-bind  主要用于属性绑定,Vue官方提供了一个简写方式:bind,例如:&lt;!-- 完整语法 --&gt; &lt;a v-bind:href="url"&gt;&lt;/a&gt; &lt;!-- 缩写 --&gt; &lt;a :href="url"&gt;&lt;/a&gt;一.绑定HTML Class(一)、对象语法:我们可以给v-bind:clas

汉堡请不要欺负面条 1万+

点云工具CloudCompare下载、安装与汉化

打开软件后,是英文界面,找到菜单栏【Display】-【Language Translation】,选择简体中文。进入官网后,点击菜单栏【Download】提示需要重启软件才能生效,点OK即可。重启软件后,已经是中文了。选择合适系统进行下载。常规软件安装流程即可。

sagima_sdu的博客 1万+

vue中的v-bind指令

绑定标签属性 像div、p、img等等都是标签,img标签中的src就是一个属性。 未使用v-bind: <div> <img src="..." width="200px"/> </div> 使用v-bind: <div> <img v-bind:src="imgSrc" width="200px"/> </div> <script type="t

zc461346605的博客 418

人形机器人解耦驱动腿部设计与FAST性能优化

机器人运动控制的核心在于动力学解耦与能量效率优化。通过多连杆机构设计,可以实现关节运动的独立控制,显著降低惯性叠加和能量损耗。DecARt Leg采用创新的齿轮-四杆复合机构,将腿部伸缩与摆动运动完全解耦,配合多杆踝关节传动系统,实测行走速度可达4.18m/s。这种解耦设计不仅提升了动态性能,其提出的FAST指标更为腿部构型提供了量化评估基准,在仓储物流、地形适应等场景展现出显著优势,为人形机器人运动控制提供了新的技术路径。

weixin_33759613的博客 239

ISCE+Mintpy进行SBASInSAR处理(持续更新)

通过调用pairs_misregistration方法,利用safe_dict中的数据信息,对每对SLC数据进行配准误差的计算和分析,以确定数据之间的精确差异,为后续的时间序列处理提供基础。给定同一地区的两景SAR影像,经过配准之后,对应像元进行共轭相乘得到相位差,并形成干涉图,但是从干涉图中得到的相位差实际上是主值,即在(-π,π)呈周期性变化,为了还原其真实的相位差,必须在主值的基础上加或减整数倍的相位周期2π,把被卷叠的相位展开,才能顺利地反演出地面目标的高程和形变。

Cyy2511250589的博客 3736

Vue---v-bind单向绑定与v-model双向绑定

v-bind是单向绑定,数据只能由model流向view,不能从view流向model; v-model,数据既能从view流向model,也能从model流向view,是为双向绑定,我们可以将后台的查询数据等操作,通过axios请求,放在created或者mounted等钩子函数中,查询到的数据可以处理后自动传给view层。 1.创建login.vue组件 <template> <div class="login"> <form method="post".

qq_40132294的博客 3405

[统计模型] 基于R的潜在剖面分析(LPA)

本文主要介绍基于R进行潜在剖面分析(Latent Profile Aanalysis, LPA)。 关于潜在类别分析LCA/潜在剖面分析LPA的概念和区别,可以参考一下这篇文章: 潜在类别分析LCA \潜在剖面分析LPA介绍https://www.jianshu.com/p/4c830094131e?utm_campaign=maleskine 但是此文对潜类别分析的阐释还比较生涩,而且没有具体的代码编写、模型优选等内容。本文旨在丰富LPA的内容,并希望和大家交流、共同进步。 1. 什么是潜类别分.

bigstar863的博客 1万+

Vue.js —— v-bind 标签属性绑定(七)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-U...

星辰 867

多旋翼飞行器设计与控制·Pixhawk4以及外部设备接线(笔记004)

笔记主要来源:Pixhawk 4 接线快速入门 目录 一、Pixhawk 4 的各个接口 二、接线图概览(重要传感器及外围设备) 三、飞控、GPS的安装和方向 四、电源 五、无线电遥控 六、数传电台(可选) 七、SD Card(可选) 八、电机以及其他外设 一、Pixhawk 4 的各个接口 FMU:Flight Management Unit 飞行管理组件 主 FMU 处理器:STM32F765 32 位 Arm® Cortex®-M7,216MHz,2MB...

猪猪的博客 1万+

DDS协议--[第一章][概述]

Data Distribute Service,数据分发服务:数据分发服务(DDS™)是一个由对象管理组(OMG)发布的以数据为中心的中间件协议和API标准。DDS集成系统中的各个组件,提供低延迟数据连接、高可靠性以及高可扩展体系结构,以适应商业级物联网(IoT)应用程序的需求。

qq_41816308的博客 1153

v-bind详解与常见用法

你真的了解v-bind吗

m0_63005501的博客 1万+

(01)ORB-SLAM2源码无死角解析-(38) EPnP 算法原理详解→理论基础二:分情况求得beta初始解

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.youkuaiyun.com/weixin_43013761/article/details/123092196 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}

江南才尽江南山,年少无知年少狂! 1025

【Vue组件自定义事件详解】

本篇文章介绍了组件自定义事件的原理以及使用的方法,在实际开发中,组件的自定义事件也是一个小技巧,能有效提高开发的效率

小田是个程序员的博客欢迎你的到来呀~ 5313

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[Vue]组件自定义事件

自定义事件 1. 自定义属性实现子组件向父组件传递数据 2. 自定义事件实现子组件向父组件传递数据 2.1 进行自定义事件的绑定 2.2 触发自定义事件 2.3 使用 ref 绑定自定义事件 2.3.1 语法 2.3.2 自定义事件的绑定 2.3.3 使用 ref 绑定自定义事件的好处 2.4 触发自定义事件向处理函数传递多个参数 2.5 自定义事件只触发一次 2.6 解绑自定义事件 2.6.1 语法 2.6.2 解绑一个自定义事件 2.6.3 解绑多个自定义事件 2.6.4 解绑所有自定义事件 3. 自定

emmmm..... 2481

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Vue中的自定义事件

Vue中的自定义事件

m0_61787196的博客 1362

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Vue自定义事件详细介绍】

Vue.js 中自定义事件是组件间的一个主要通信方式,尤其是用于子组件向父组件发送消息,在 Vue 2.x 和 Vue 3.x 中自定义事件的概念是基本相同的,但是具体实现方式可能有所不同。Vue自定义事件是为组件间通信设计, vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑父Vue实例->子Vue实例,通过prop传递数据子Vue实例->父Vue实例,通过事件传递数据你可以使用v-on。

cz88888888666的博客 1693

Vue:自定义事件

一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value attribute 用于不同的目的。model 选项可以用来避免这样的冲突

ChinaDragon10的博客 1459

Vuejs自定义事件十五

//App.vue组件 <template> <div class="app"> <h2>{{ msg }}</h2> <h2>子组件传递过来的数据,{{studentName}}</h2> <School :getSchoolName="getSchoolName" /> <!-- 使用$emit触发事件 --> <Student v-on:getStudent

qq_50563868的博客 197

浅谈Vue 自定义事件——原理及用法

在Vue 中,对HTML的原生事件做了支持。例如:click、focus、change等事件。除了原生事件外,Vue 还允许用户自定义事件。 什么是事件?什么是自定义事件? 在了解自定义事件前,先来了解什么是事件。

Jay的博客 3601

Vue之自定义事件

在vue中有内置事件click、mouseover等事件,同时我们还可以自定义一个事件 。事件名最好都是小写,或可用“—”进行分割命名,否则可能无效。如:my-event。 直接看下面这个例子 1.自定义了一个组件<button-counter> 2.自定义了一个increment事件,在事件中调用了incrementTotal方法 3.调用内置点击事件click,注意在这里:@click.native,后面加上了.native。它表示调用内置事 件click,所以我们不难看出在...

IABQL的博客 2636

Vue的自定义事件

Vue的自定义事件子组件中,选择click或其他原生事件来封装父组件中,使用v-on/@绑定事件监听器 自定义事件是自定义组件才有的。 自定义事件其实就是封装DOM原生事件,如何封装?——就是在原生事件的回调中发射(emit)一个自定义事件。 下面就是具体操作: 子组件中,选择click或其他原生事件来封装 // 自定义组件boringButton.vue <template> <button v-on:click="incrementHandler">{{ counter

weixin_38682336的博客 1294

Vue3 自定义事件

本文介绍了Vue3中自定义事件的使用方法。通过电子木鱼组件示例,展示了子组件如何通过$emit触发自定义事件,父组件如何监听处理。文章详细说明了事件声明、参数传递规则,并演示了事件校验的实现方式。自定义事件解决了子组件无法直接修改父组件数据的问题,实现了组件间的通信。文中还特别强调了事件命名的规范建议和参数校验的重要性,为开发者提供了完整的自定义事件使用指南。

qq_39055970的博客 915

Vue.js 自定义事件 - 发出多个值

没有提供任何示例来展示这一点,相反,我需要参考 Stack Overflow 线程中的一些注释。我花了一点时间才找到这个问题的解决方案,所以我认为最好把它记录在一篇博文中,让其他人从中受益。我们从子组件发出了事件。可以在父组件中捕获此事件,其中子组件使用符号呈现,在本例中为 .我最近需要一种方法,在单个自定义事件中将多个值从 child 传递到 parent。在 VueJS 自定义事件中从 Child 到 Parent 发出多个值。VueJS 自定义事件是在子组件和父组件之间进行通信的好方法。

weixin_49511997的博客 428
上一篇: Vue之Props
下一篇: ECMAScript 2015 Features - Babel
小菜101
博客等级 码龄10年 16粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值