Vue 事件处理程序的可组合函数

2023-12-28

我正在使用 Vue 2.0、ES6、Webpack。

我有一个组件(我们称之为Parent)和几个孩子(我们称之为text-input每个)。每一个text-input发出一个名为的事件change每一个都应该改变 Parent 内部的一个不同的属性。比方说Parent有一个名为info和里面info我有姓名、电子邮件等。

我想要完成的是使用与我的相同的功能设置正确的属性(名称,电子邮件,...)@change option.

<text-input
   @change="alterProperty('name')">  
 </text-input>
 <text-input
   @change="alterProperty('email')">  
 </text-input>

My Parent会有这个方法:

alterProperty (property) {
  return (changeValue) => {
    this.info[property] = changeValue
  }
}

到目前为止,什么都没有,我无法让它工作,也许是 Vue 处理事情的方式有问题,我不知道。如果有人知道这件事,我很感激你的帮助。

Thanks


请检查这个 jsFiddle 示例:https://jsfiddle.net/mani04/2mmbsyy3/ https://jsfiddle.net/mani04/2mmbsyy3/

它的工作原理完全符合您的预期。这是我的使用方法text-input成分:

<text-input :value="userInfo.name" @change="alterProperty('name', $event)"></text-input>

Note: alterProperty is an 内联方法也就是直接调用的@change事件处理程序。所以它不会得到默认值$event参数 - 携带子组件参数的特殊变量,除非包含它。在您的代码中,这是缺失的部分。

Ref: https://vuejs.org/guide/events.html#Methods-in-Inline-Handlers https://vuejs.org/guide/events.html#Methods-in-Inline-Handlers

在示例 jsFiddle 实现中,$event只是来自子组件的事件参数,而不是 DOMevent。我的 alterProperty 方法(在父组件中)的工作原理如下:

alterProperty: function(propToChange, newValue) {
    this.userInfo[propToChange] = newValue;
}

jsFiddle 还会输出父组件上的对象,该对象会按预期进行修改。

编辑:附加说明

您的子组件不应绑定this.value直接到您的input元素,如this.value通过 props 传递。如果您尝试这样做,您将收到类似以下的控制台错误消息:

[Vue warn]:避免直接改变 prop...

为了避免这种情况,我使用了本地计算属性 -textFieldValue,它有它的 getter 和 setter 方法。而 getter 只是返回this.value,设置者是发送change事件返回父组件,无需触摸this.value这是通过 props 传递的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 事件处理程序的可组合函数 的相关文章

随机推荐

  • 为什么 golangticker.Stop() 在tickerTest1中不起作用?

    我知道Stop函数无法关闭通道 我只是对两个不同的结果感到困惑tickerTest1 and tickerTest2 package main import time log func tickerTest1 ticker time New
  • 如果我只有任务 ID,我可以获得 celery 任务的参数吗?

    如果我有原来的任务 我可以从中得到论据task request args 但是如果我只有任务 ID 有没有办法获取参数 看起来没有办法从AsyncResult对象 据我所知 没有办法重新创建任务 我想这样做是因为我有一个前端可以轮询后端以获
  • Clang 无法在 std::function 实例化中扩展参数包

    编译的代码片段std c 17作为唯一的编译器标志 使用 GCC 9 1 成功编译 Godbolt https godbolt org z QKJomx 使用 Clang 8 0 0 发出编译器错误 代码片段下方的错误 Godbolt ht
  • SQL Server 性能提示[重复]

    这个问题在这里已经有答案了 可能的重复 SQL WHERE 子句是否短路计算 https stackoverflow com questions 789231 is the sql where clause short circuit ev
  • 使用 python/PIL 自动裁剪图像

    谁能帮我弄清楚我的图像自动裁剪脚本中发生了什么 我有一个带有大透明区域 空间的 png 图像 我希望能够自动裁剪该空间并保留必需品 原始图像有一个方形画布 最好是矩形 仅封装分子 here s the original image 通过谷歌
  • Prolog - 简化导数

    所以我这个学期才开始使用 Prolog 并完成了实现一个非常基本的作业d function variable derivative 我这样做是这样的 d X X 1 d C X 0 atomic C C X d X E X E X E 1
  • 错误:没有为控制器定义“_sonata_admin”

    我按照文档添加自定义路线 当我单击列表视图中的按钮时 出现错误 没有 sonata admin为控制器定义 UserController以及当前的路线resetPassword 文档 http sonata project org bund
  • C#:调用 Bitmap.save() 后 Dispose() 一个 Bitmap 对象?

    我有这个 Bitmap bmp new Bitmap image image processing bmp Save path fileName 我想知道是否需要打电话bmp Dispose 在此代码之后 提前致谢 我会用using块和Pa
  • 处理过期航空里程的流程

    我正在开发一个需要处理过期航空里程的应用程序 里程可以使用 但如果在特定日期之前未使用 里程就会过期 我想确保我的里程数已过期 但如果已使用 则不要过期 因此 我必须在过期之前检查在给定日期范围内是否使用了足够的里程 以下是我的初步想法 有
  • UIWebView YouTube 嵌入视频未加载

    我在获取通过 UIWebView 嵌入到我正在制作的 iOS 应用程序中的视频时遇到一些问题 iframe 播放器加载完全正常 但是当我点击播放按钮时 白色旋转器出现一秒钟然后消失 只留下一个黑框如果我触摸黑框 我会得到标题和 i 按钮 但
  • 从数据库输出到文本区域

    我试图通过这样做将数据库字段值放入文本区域 但它不起作用
  • 尝试将创建的文本文件作为电子邮件附件发送 - 从默认文件夹

    我正在尝试一些简单的事情 例如创建一个文本文件 然后将其作为附件发送 虽然如果我使用 SD 卡它工作正常 但我不知道将它放在 标准数据文件夹 中的哪里 所以我的应用程序实际上适用于没有 SD 卡的每个人 并且该文件有点不可见 当这段代码有效
  • Dapper 抛出“DynamicMethod 的类型所有者无效”。

    所以我尝试使用 Dapper net 并且我很喜欢它 我不喜欢的是 当我尝试批量插入实体时 出现以下错误 DynamicMethod 的类型所有者无效 在 System Reflection Emit DynamicMethod Init
  • 在 JavaScript 中如何将语言代码转换为语言名称?

    我使用以下方式获取浏览器的语言代码 var lang window navigator language 这将返回代码 即 en US 如何将其转换为语言名称 即英语 Javascript 有一个 API 使用Intl使用选择的语言将语言转
  • 如何为传奇提供历史实例?

    我想在成功登录后重定向到新页面 路线 V4 的使用方式如下 import browserHistory from browser history signleton class App extends Component render co
  • 如何使用适用于 Mac 的 Oracle 新 1.7 JDK 运行 Eclipse?

    我正在尝试获取新的 1 7 JDK https blogs oracle com java entry five update java releases使用 Eclipse 这是 Oracle 的官方版本 我的意思并不是仅仅将 Eclip
  • 为没有 PowerBi 帐户且不允许共享回来的用户共享仪表板和报告的方法

    我想与没有 Microsoft PowerBI 帐户的用户共享一些 PowerBi 仪表板 我知道我可以在 Sharepoint 在线共享它 但此解决方案的问题是我们可以在网页按钮上找到共享按钮 Facebook Twitter URL 我
  • 打字稿中的通用对象类型

    在打字稿中 有什么方法可以为变量分配通用对象类型 这就是我所说的 通用对象类型 的含义 let myVariable GenericObject 1 Should throw an error abc Should throw an err
  • Git 和令人讨厌的“错误:无法锁定现有信息/引用致命”

    从远程 git 存储库克隆后 在 bettercodes 我做了一些改变 承诺 并试图推动 git push origin master 错误 错误 无法锁定现有信息 参考致命 git http push 失败 本案例涉及已经存在的存储库
  • Vue 事件处理程序的可组合函数

    我正在使用 Vue 2 0 ES6 Webpack 我有一个组件 我们称之为Parent 和几个孩子 我们称之为text input每个 每一个text input发出一个名为的事件change每一个都应该改变 Parent 内部的一个不同