Pet*_*erB 10 vue.js vuejs3 vue-composition-api
在定义自定义事件时, Vue 鼓励我们通过以下emits
选项在组件上定义发出的事件:
app.component('custom-form', {
emits: ['inFocus', 'submit']
})
Run Code Online (Sandbox Code Playgroud)
使用 Vue 3 的组合 API,当一个独立的组合函数发出自定义事件时,是否可以在组合函数中定义这些?
agm*_*984 71
我使用脚本设置语法这样做:
<script setup>
import { defineEmits } from 'vue'
const emit = defineEmits(['close'])
const handleClose = () => {
emit('close')
}
</script>
Run Code Online (Sandbox Code Playgroud)
rol*_*oli 32
如果您正在使用,script setup
则可以使用defineEmits
编译器宏,而不必导入它:
<script setup>
const emit = defineEmits(['inFocus', 'submit'])
emit('inFocus')
</script>
Run Code Online (Sandbox Code Playgroud)
您还可以使用对象语法,它允许执行事件验证:
<script setup>
const emit = defineEmits({
// No validation
inFocus: null,
// Validate submit event
submit: ({ email, password }) => {
if (email && password) return true
else return false
}
})
function submitForm(email, password) {
emit('submit', { email, password })
}
</script>
Run Code Online (Sandbox Code Playgroud)
注意:submit
无论验证如何,都会发出该事件,但如果验证未通过,您将收到 Vue 警告:
[Vue warn]:无效的事件参数:事件“提交”的事件验证失败。
使用 TS 输入:
<script setup lang="ts">
const emit = defineEmits<{
(e: 'change', id: number): void
(e: 'update', value: string): void
}>()
</script>
Run Code Online (Sandbox Code Playgroud)
Bou*_*him 17
不,因为在setup
钩子内部使用了组合函数,它无法访问其他选项,例如methods
和emits
:
export default defineComponent({
name: "layout",
emits: ['showsidebar']
setup(props,{emit}) {
const showSidebar = ref(true);
const {
breakpoints
} = useBreakpoint();
watch(breakpoints, (val) => {
showSidebar.value = !(val.is === "xs" || val.is === "sm");
emit('showsidebar',showSidebar.value )
});
return {
showSidebar,
};
},
data() {
...
},
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,useBreakpoint
只提供了一些组件可以使用它来表现的逻辑,如果有某种方法可以在组合函数中定义发射选项,这个函数将始终发射该事件,即使在组件内部使用该函数定义了发射的处理程序事件。
Sni*_*ers 10
如果你想获得所有context
:
setup(props, context) {
// console.log(context)
context.emit("update:modelValue", data)
},
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9094 次 |
最近记录: |