[Vue]组件——将控件的原生事件绑定到组件

1.方法1:.native修饰符

1.1.native修饰符:将原生事件绑定到组件的根元素

<base-input v-on:focus.native="onFocus"></base-input>

1.2缺点:

如以下根元素实际上是一个 <label> 元素时,原生事件不能被绑定到input事件上:

<label>
  {{ label }}
  <input
    v-bind="$attrs"
    v-bind:value="value"
    v-on:input="$emit(‘input‘, $event.target.value)"
  >
</label>

2.方法2:$listeners 属性(它是一个对象,里面包含了作用在这个组件上的所有监听器。)

2.1使用 v-on="$listeners" 将所有的事件监听器指向这个组件的某个特定的子元素。

<template>
  <button
    :disabled="mixin_controlDisable"
    :class="$style.button"
    v-on="$listeners"
  >
  </button>
</template>

2.2对于类似 <input> 的你希望它也可以配合 v-model 工作的组件来说,为这些监听器创建一个类似下述 listeners 的计算属性通常是非常有用的:

Vue.component(‘base-input‘, {
  inheritAttrs: false,
  props: [‘label‘, ‘value‘],
  computed: {
    inputListeners: function () {
      var vm = this
      // `Object.assign` 将所有的对象合并为一个新对象
      return Object.assign({},
        // 我们从父级添加所有的监听器
        this.$listeners,
        // 然后我们添加自定义监听器,
        // 或覆写一些监听器的行为
        {
          // 这里确保组件配合 `v-model` 的工作
          input: function (event) {
            vm.$emit(‘input‘, event.target.value)
          }
        }
      )
    }
  },
  template: `
    <label>
      {{ label }}
      <input
        v-bind="$attrs"
        v-bind:value="value"
        v-on="inputListeners"
      >
    </label>
  `
})

现在 <base-input> 组件是一个完全透明的包裹器了,也就是说它可以完全像一个普通的 <input> 元素一样使用了:所有跟它相同的特性和监听器的都可以工作。

原文地址:https://www.cnblogs.com/vickylinj/p/9577837.html

时间: 2024-08-03 18:58:11

[Vue]组件——将控件的原生事件绑定到组件的相关文章

vue表单控件绑定+自定义组件

vue表单控件绑定 v-model 在表单控件元素上创建双向数据绑定 文本框双向绑定 多选框演示 下拉列表演示 vue自定义组件 组件放在components目录下 组件基本要素:props  $emit 通过import导入自定义组件 制作一个倒计时组件: 1.在conponents目录下,新建一个time.vue 方法写在mouted声明周期函数内,代码如下: 然后在index.vue中使用组件: 我之前组件命名为time,可能与默认什么冲突了,然后报错不让用,所以改名成cyytime 但是

区别API、框架、插件、组件、控件等

区别API.框架.插件.组件.控件等 一.API 1.概念 提供给不同语言的一个接口,也就是在对应的函数内提供相应的方法(控制Windows各个部件的外观和行为的一套预先定义的Windows函数),只要用js语法调用想要的功能.例,js内BOM的screen方法. 2.目的 对底层的封装,将一些不会变化的东西封装一下,可以提高开发效率. 3.API理解 JS的api有很多的功能,只要知道有这样的东西,到时候直接去网上找调用的方法就可以了.例,百度地图的API. 二.框架 1.概念 js框架就是将

使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件

一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: 该代码实现的效果如下: 参考文献: [1]AxisY Range Auto https://www.devexpress.com/Support/Center/Question/Details/Q266328 二.设置GridControl表格中的超级链接: 1.首先在表格的设计器中添加一个Hyp

Android 控件的触摸事件传递与处理

了解Android控件的触摸事件传递与处理对我们日常开发中自定义控件和触摸事件冲突解决有重大意义.Android控件的触摸事件传递和处理主要有以下几个方法,下面一一介绍. 一.与触摸事件有关的几个方法 boolean dispatchTouchEvent(MotionEvent ev);                                                                                               接收到触摸事件时,是否

C# 常用控件及单击事件

1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2)WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: Normal (窗体正常显示). Minimized(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示). (3)StartPosition属性:用来获取或设置运行时窗体的起始位置.(System.Windows.Forms.SystemInformation.WindowsArea.

授予组件和控件许可权限

本随笔主要参考了MSDN 一.简单的一个例子 To enable licensing for your component or control 1.Apply a LicenseProviderAttribute to the class. 给类添加  LicenseProviderAttribute 特性. 2.Call Validate or IsValid in the constructor. 在构造函数中调用Validate函数. 3.Call Dispose on any gran

C#学习笔记(20140909)-按钮控件:单击事件和command事件

在 Web 应用程序和用户交互时,常常需要提交表单.获取表单信息等操作.在这其间,按钮控件是非常必要的.按钮控件能够触发事件,或者将网页中的信息回传给服务器.在 ASP.NET 中,包含三类按钮控件,分别为 Button.LinkButton.ImageButton. Click 单击事件 在Click 单击事件中,通常用于编写用户单击按钮时所需要执行的事件,这种事件很简单,用户单击一个按钮,就会执行按钮中的代码. Command 命令事件 按钮控件中,Click 事件并不能传递参数,所以处理的

ASP.NET中多个控件共享同一事件,sender的使用

当多个控件共享同一事件时,同时还需要在事件中区分到底是点击了那个控件时,就需要通过控件事件中的sender参数.方法是在事件中定义该控件的变量,如RadioButton控件的公共事件就定义 RadioButton radBtn = (RadioButton)sender; 这样就可以通过定义的控件变量去区分是那个控件触发了事件.如radBtn.ID就可以取到触发事件控件的ID属性.

[转]如何在数据绑定时不让combox控件触发SelectedIndexChanged事件

this.cboVendor.SelectedIndexChanged -= new System.EventHandler(this.cboVendor_SelectedIndexChanged); cboVendor.DataSource = myClass.RunQueryCmd(strSqlCmd); cboVendor.DisplayMember = "SupplierCode"; //添加事件 this.cboVendor.SelectedIndexChanged += n