方式一:
自定义子组件
<template>
<input type="search" @input="changeInput" data-myValue="">
</template>
<script>
export default {
name: 'CustomModel',
model: {
prop: 'myValue',
event: 'myInput',
},
props: {
myValue: [String, Number],
},
methods: {
changeInput ($event) {
this.$emit('myInput', $event.target.value)
},
}
}
</script>
父组件
<template>
<div class="home">
<h3>输入的实时内容:{{ myValue }}</h3>
<custom-model v-model="myValue"></custom-model>
</div>
</template>
<script>
import CustomModel from './CustomModel'
export default {
name: 'Home',
components: {
CustomModel,
},
data () {
return {
myValue: ''
}
},
}
</script>
方式二:
<template>
<div>
<input type="text" v-model="currentValue" />
<div>{{ currentValue }}</div>
<button @click="handleAdd">子组件改变值</button>
</div>
</template>
<script>
export default {
props: {
value: {
type: String,
default: function () {
return "";
},
},
},
computed: {
currentValue: {
get: function () {
return this.value;
},
set: function (val) {
this.$emit("input", val);
},
},
},
methods: {
handleAdd() {
this.currentValue = parseInt(this.currentValue) + 1 + "";
},
},
};
</script>
<template>
<div>
<Child v-model="test"></Child>
<div>{{ "父组件获取得值:" + test }}</div>
</div>
</template>
<style>
</style>
<script>
import Child from "./child.vue";
export default {
components: {
Child,
},
data() {
return {
test: "666",
};
},
};
</script>