【发布时间】:2019-11-19 01:12:27
【问题描述】:
我正在尝试为 Vue.js 中的 <input/> 元素制作一个包装器组件。
组件:
<template>
<div>
<input v-bind="$attrs" :value="value" @input="input" />
...
</div>
<template>
Vue.component("my-input", {
inheritAttrs: false,
props: ['value'],
methods: {
input($event): void {
this.$emit("input", $event.target.value)
}
}
})
用法:
<my-input v-model="myModel" />
这似乎工作得很好。通过发出目标元素值,模型通过输入事件处理程序得到更新。
但是,现在我正在尝试将此组件与一些现有代码一起使用:
<my-input v-model="myModel2" @input="something = $event.target.value" />
这是我在处理 $emit("input") 事件时遇到问题的地方。我收到以下错误:
无法读取未定义的属性“值”
所以,我的$emit 正在发出值,而现在现有的@input="something..." 事件处理程序无法正确引用$event。
如果我将组件的 input 方法更改为发出 $event 而不是 $event.target.value,新代码似乎可以工作,但是模型 没有得到更新 会更新为InputEvent 而不是实际的值。
我不确定我需要做什么。
【问题讨论】:
标签: javascript vue.js eventemitter