vue2
父组件
<DomDialog v-model="isDomDialog"></DomDialog>
<DomDialog v-bind:value="isDomDialog" v-on:input="isDomDialog=$event"></DomDialog>
子组件
props:{
value:{type: Boolean,
},
},
data(){ return {
dialogVisible:false,
} },
watch:{ value(val){ this.dialogVisible = val
},
},
methods: {
this.$emit('input',false)
},
vue3
<!-- 父组件 -->
<div id="app">
<my-input v-model:inpVal.trim="value" />
</div>
<!-- 子组件 -->
<template>
<div class="my-input">
<input type="text" :value="inpVal" @input="handelInput" />
<p>value: {{ inpVal }}</p>
</div>
</template>
<script>
import { onMounted } from "vue";
export default {
props: ["inpVal", "inpValModifiers"],
setup(props, ctx) {
const printModifiers = () => {
console.log(props.inpValModifiers);
};
const handelInput = (e) => {
ctx.emit("update:inpVal", e.target.value);
};
onMounted(printModifiers);
return {
printModifiers,
handelInput
};
},
};
</script>
<template>
<div class="my-input">
<input type="text" :value="inpVal" @input="handelInput" />
<p>value: {{ inpVal }}</p>
</div>
</template>
<script setup>
import { onMounted,defineProps} from "vue";
const props = defineProps({
inpVal:{type:String,default:100},
inpValModifiers:{type:String,default:200},
})
function printModifiers(){
console.log(props.inpValModifiers);
};
function handelInput(e){
emit("update:inpVal", e.target.value);
};
const emit = defineEmits([ 'update:inpVal' ])
onMounted(printModifiers)
</script>
vue3写法watch必写部分
对外暴露绑定的属性
const props = defineProps({
value: {
type : Array,
required: true,
default : () => []
},})
const imageArr = ref(props.value)
监听对外暴露的属性 修改data
watch(() => props.value, () => {
imageArr.value = props.value
})
const emit = defineEmits([ 'update:value' ])
watch(() => [ ...imageArr.value ], () => {
emit('update:value', imageArr.value)
})
vue3写法总结下
<input type="text" :value="inpVal" @input="handelInput" />
const handelInput = (e) => {
ctx.emit("update:inpVal", e.target.value);
};
<!-- 父组件 -->
<div id="app">
model后面的名字看子组件emit后事件的名字
<my-input v-model:inpVal="value" />
</div>