vue3组件内实现v-model

1、实现效果

2、思路 

1)高亮的activeTab属性绑定到modelValue(prop)

2)  触发tab栏时,触发update:modelValue

3、组件代码

1)HTML

<div class="my_tabs">
        <div class="tab_nav" v-for="item in data.tabArr" :key="item.key" @click="tabClick(item)" :class="item.isActive? 'tab_nav_active' : 'tab_nav_normal">
            <div class="my_tabs_nav_title">{{ item.title }}</div>
        </div>
    </div>

2) ts

const props = defineProps({
    modelValue: {
        type:[String,Number]
    },
    tabArr: {
        type: Array,
        default: () => {
            return [{title:'tab栏1'},{title:'tab栏2'}]
        }
    }
})

const $emit = defineEmits(["tab-click","update:modelValue"])

const data:any = reactive({activeTab: '',tabArr: []})

// 监听modelValue赋值给activeTab
watch(
    () => props.modelValue,
    (val):void => {data.activeTab = val},
    {immediate:true}
)

onMounted ( () => {
    nextTick(() => {
     // 遍历props.tabArr,title,isActive赋值给data.tabArr;
     // props.modelValue查找数组中某个isActive为true
     // .....
    })
})

const tabClick = (item:any) => {
    $emit('update:modelValue', item.name)
    $emit('tabClick', item)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2中,父组件实现v-model的方式是通过props和自定义事件来实现的。具体步骤如下: 1. 在父组件中,通过props将数据传递给组件。可以使用v-bind指令将父组件的数据绑定到组件的props上。 2. 在组件中,接收父组件传递的数据,并将其作为组件的内部数据进行处理。 3. 在组件中,通过$emit方法触发一个自定义事件,并将需要传递给父组件的数据作为参数传递给该事件。 4. 在父组件中,通过v-on指令监听组件触发的自定义事件,并在事件处理函数中更新父组件的数据。 这样,父组件之间就实现了双向数据绑定,父组件的数据改变会自动更新到组件组件通过触发自定义事件来通知父组件的数据改变。 总结起来,父组件实现v-model的方式是通过props和自定义事件来实现的,父组件通过props将数据传递给组件组件通过$emit方法触发自定义事件来通知父组件的数据改变。 #### 引用[.reference_title] - *1* *2* *3* [vue2 组件传值的方式 v-model的原理和实现](https://blog.csdn.net/qq_41370833/article/details/124871927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值