Vuejs学习笔记--父组件与子组件的数据通信
父传子:通过props属性传递,props写在子组件中
- 定义变量:在子组件中定义props属性,添加变量------(子组件中)
- 赋值指向:将父组件的data数据指向props变量------(父组件模板中)
- 使用变量:通过props中新的变量使用父组件的数据------(子组件模板中)
子传父:通过自定义事件传递,自定义事件写在子组件模板中
- 定义事件:在子组件模板中自定义事件,添加事件名称------(子组件模板)
- 发出事件:在子组件的方法中将事件发出this.emit('自定义事件名称','传递数据')------(子组件方法)
- 绑定事件:父组件模板中,绑定子组件发出的事件------(父组件模板)
- 接收数据:父组件方法中,接收子组件传递的数据------(父组件方法)
案例代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <!-- 父传子:2、将父组件的data数据指向props变量 --> <!-- 子传父:3、绑定事件 --> <cpn :number1="num1" :number2="num2" @num1change="num1change" @num2change="num2change"></cpn> </div> <template id="cpn"> <div> <!-- 父传子:3、通过props中新的变量使用父组件的数据 --> <h2>props:{{number1}}</h2> <h2>data:{{dnumber1}}</h2> <!-- <input type="text" v-model="dnumber1"> --> <!-- 子传父:1、定义事件 --> <input type="text" :bind="dnumber1" @input="dunm1Input"> <h2>props:{{number2}}</h2> <h2>data:{{dnumber2}}</h2> <!-- <input type="text" v-model="dnumber2"> --> <input type="text" :bind="dnumber1" @input="dunm2Input"> </div> </template>
<script src="../js/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { num1: 1, num2: 0, }, components: { cpn: { template: '#cpn', // 父传子:1、定义props数据,属性 props: { number1: Number, number2: Number, }, data() { return { dnumber1: this.number1, dnumber2: this.number2, } }, methods: { // 子传父:2、发出事件 dunm1Input(event) { // 1. 将input中的value赋值到dnumber中 this.dnumber1 = event.target.value; // 2. 为了让父组件可以修改值,发出一个事件 this.$emit('num1change', this.dnumber1); // 3. 同时修改dnumber2的data值 this.dnumber2 = this.dnumber1 * 100; // 4. 同时修改dnumber2的prop值 this.$emit('num2change', this.dnumber2) }, dunm2Input(event) { this.dnumber2 = event.target.value; this.$emit('num2change', this.dnumber2) // 3. 同时修改dnumber2的data值 this.dnumber1 = this.dnumber2 / 100; // 4. 同时修改dnumber2的prop值 this.$emit('num1change', this.dnumber1) } } } }, methods: { // 子传父:4、接收数据 num1change(value) { this.num1 = parseInt(value); }, num2change(value) { this.num2 = parseInt(value); } } }); </script> </body> </html>

浙公网安备 33010602011771号