示例:
代码:
注册组件
// 注册组件
export default {
components: {
//注册的组件名,例如为InputNumber
InputNumber
}
}
父组件:
<template>
<div>
<InputNumber :num="num" @num-change="handleNumChange"></InputNumber>
</div>
</template>
<script>
import InputNumber from "@/components/login/InputNumber.vue";
export default {
components: { InputNumber },
data() {
return {
//父组件初始化num值
num: 0,
};
},
methods: {
handleNumChange(num){
this.num = num
}
}
</script>
子组件:
<template>
<div>
<button @click="handleIncrement(-1)">-</button>
<input type=text :value="num"></input>
<button @click="handleIncrement(1)">-</button>
</div>
</template>
<script>
import InputNumber from "@/components/login/InputNumber.vue";
export default {
props:['num'],
data() {
return {
};
},
methods: {
handleIncrement(count){
this.$emit('num-change',this.num + count)
}
}
</script>
思路:(1)首先子组件进行注册,父组件引入子组件并引用
<InputNumber :num="num" @num-change="handleNumChange"></InputNumber>
(2)以num值为例,父组件在引入的子组件后,绑定num来传值给子组件,handleNumChange()函数来改变值
<InputNumber :num="num" @num-change="handleNumChange"></InputNumber>
handleNumChange(num){
this.num = num
}
(3)而子组件中双向绑定了num值,使用props接受来自父组件的num值
props是单向的,只适合用于接受父组件的数据,子组件的值应该由父组件来影响
<input type=text :value="num"></input>
props:['num'],
(4)接受到num值后,在子组件更改num值的方法中,使用this.$emit()将num传回给父组件
handleIncrement(count){
this.$emit('num-change',this.num + count)
}
$emit 触发父组件的自定义事件