P粉9165538952023-09-02 09:42:58
更新2
在setup()
函数中,您必须使用Composition API
使用Composition API
,您可以通过setup()中获得emit
函数。 org/api/composition-api-setup.html#setup-context" rel="nofollow noreferrer">设置上下文。
检查我的第一个示例:
您将获得 emit
函数
setup(props, { emit })
然后直接使用
emit("registers", getCall(toRef(param_search,'param_search')))
在您的情况下,您传递了设置上下文,因此您可以通过context
调用emit
context.emit("registers", getCall(toRef(param_search,'param_search')))
看来您确实不需要定义自定义事件,但我仍然推荐它:
emits: ['registers']
请注意,this.$emit()
调用由 Options API
使用,而不是 Composition API
const { createApp, ref } = Vue;
const MyComp = {
setup(props, { emit }) {
const emitMyEvent = (event) => emit('registers', event);
return { emitMyEvent }
},
template: `<button id="my-button" @click="emitMyEvent">emit</button>`
}
const App = {
components: { MyComp },
setup() {
const getCall = (event) => console.log('getCall(): ' + event.target.id);
return { getCall }
}
}
const app = createApp(App)
app.mount('#app')
#app { line-height: 2; }
[v-cloak] { display: none; }
<div id="app" v-cloak>
<my-comp @registers="getCall"></my-comp>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
更新
与使用 this.$emit
的 Options API
相同
const { createApp, ref } = Vue;
const MyComp = {
emits: ['registers'],
methods: {
emitMyEvent: function(event) { this.$emit('registers', event) }
},
template: `<button id="my-button" @click="emitMyEvent">emit</button>`
}
const App = {
components: { MyComp },
methods: {
getCall: (event) => console.log('getCall(): ' + event.target.id)
}
}
const app = createApp(App)
app.mount('#app')
#app { line-height: 2; }
[v-cloak] { display: none; }
<div id="app" v-cloak>
<my-comp @registers="getCall"></my-comp>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>