因此,我试图在Vue 3中构建一个组件,它充当一个表单,为了让数据由父节点处理,我希望它发出一个对象,所有输入都是变化的。我遇到的问题是,我似乎无法从watch()
内部调用$emit
(可能是因为上下文,但我也不明白为什么默认情况下不传递组件范围的上下文,并且它不接受this
)。因为同样的原因,我也不能调用任何方法。
我确实看到一些人使用watch: {}
语法,但据我所知,这是不推荐的,它对我来说也没有太大的意义。
这里有一个最小的例子,我试图实现什么。每当输入日期发生更改时,我希望组件发出一个自定义事件。
<template>
<input
v-model="date"
name="dateInput"
type="date"
>
</template>
<script>
import { watch, ref } from "vue";
export default {
name: 'Demo',
props: {
},
emits: ["date-updated"],
setup() {
const date = ref("")
watch([date], (newVal) => {
// $emit is undefined
console.log(newVal);
$emit("date-updated", {newVal})
// watchHandler is undefined
watchHandler(newVal)
})
return {
date
}
},
data() {
return {
}
},
mounted() {
},
methods: {
watchHandler(newVal) {
console.log(newVal);
$emit("date-updated", {newVal})
}
},
}
</script>
2条答案
按热度按时间2wnc66cl1#
为了保持组件的一致性,不要混合使用option和composition API,
emit
函数在setup
钩子的context
参数中可用::如果你想添加
watchHandler
方法,你可以定义一个简单的js函数,比如:eaf3rand2#
我应该如何在设置语法糖做这件事