使用 emit 需要 先注册
在 setup 中 使用emit的时候如果不注册会给父组件反馈两次。
详情如下

    vue.component('ls-unit', {
        props: {
            selectedItems: {
                default: {}
            }
        },
        emits: ['change'],  //  这里需要先注册
        setup(props, { emit }){
            const data = reactive({
                source: [
                	{id: 0, text: 'A'},
                	{id: 1, text: 'B'},
               	],
                selected: {}
            })
            const fn = ()=>{
                console.log('1') // 正常输出一次
                emit('change', data.selected)// 如果不注册 emit会给父组件发两次响应!!
            }
            return {
                ...toRefs(data),
                fn,
            }
        },
        template: `
            <select @change="fn" v-model="selected">
                  <option :value="item" v-for="item in source" :key="item.id">{{item.text}}</option>
            </select>
        `
    })

Logo

前往低代码交流专区

更多推荐