vue3自定义组件双向数据绑定
程序员文章站
2022-06-07 18:18:12
...
1. 父组件绑定变化
- vue2中父组件通过v-model绑定,子组件默认接收一个value属性
- vue3中需要通过v-model指定一个需要绑定的属性名称
// 通过:后面指定子组件接收的props名称
<modal v-model:visible="modalVisible"></modal>
2.子组件通过props接收,然后通过watch监听,定义一个中间变量
- teleport可以指定组件要挂载的元素节点,在代码中不会直接插入父组件代码中
- emits:vue3新增属性,定义子组件通过emit传递给父组件的事件名称,以及通过事件传递的参数
- vue2中通过input事件可以实现双向绑定,vue3需要通过update方法
<template>
<teleport to='#modal' v-if="show">
<div class="modal">
<slot>我是弹窗组件</slot>
<button @click="closeModal">关闭弹窗</button>
</div>
</teleport>
</template>
<script lang='ts'>
import {defineComponent, ref, watch} from 'vue'
export default defineComponent({
props:{
isOpen:Boolean,
visible:{
type:Boolean,
default:false
}
},
// 触发的事件的名称
emits:{
// "close-modal":(payload:any)=>{
// return payload.type==='close'
// },
"close-modal":null,
"update:visible":(val:boolean)=>{
return val
}
},
setup(props,context) {
context.emit("close-modal")
const show=ref(false)
watch(props,(newVal,oldVal)=>{
console.log(newVal,oldVal)
show.value=newVal.visible
})
watch(show,(newVal,oldVal)=>{
context.emit('update:visible',newVal)
})
const closeModal=function(){
show.value=false
}
return {
show,
closeModal
}
}
})
</script>
推荐阅读
-
Android中 自定义数据绑定适配器BaseAdapter的方法
-
Vue 框架之键盘事件、健值修饰符、双向数据绑定
-
前端笔记之微信小程序(二){{}}插值和MVVM模式&数据双向绑定&指令&API
-
Yii框架自定义数据库操作组件示例
-
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
-
VUE-Table上绑定Input通过render实现双向绑定数据的示例
-
vue数据双向绑定原理解析(get & set)
-
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
-
AngularJS学习笔记(三)数据双向绑定的简单实例
-
vue2.0数据双向绑定与表单bootstrap+vue组件