Vuejs学习笔记--父组件与子组件的数据通信

父传子:通过props属性传递,props写在子组件中

  1. 定义变量:在子组件中定义props属性,添加变量------(子组件中)
  2. 赋值指向:将父组件的data数据指向props变量------(父组件模板中)
  3. 使用变量:通过props中新的变量使用父组件的数据------(子组件模板中)

子传父:通过自定义事件传递,自定义事件写在子组件模板中

  1. 定义事件:在子组件模板中自定义事件,添加事件名称------(子组件模板)
  2. 发出事件:在子组件的方法中将事件发出this.emit('自定义事件名称','传递数据')------(子组件方法)
  3. 绑定事件:父组件模板中,绑定子组件发出的事件------(父组件模板)
  4. 接收数据:父组件方法中,接收子组件传递的数据------(父组件方法)

案例代码:

<!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>

 

posted @ 2021-09-21 15:36  天黑请闭眼、  阅读(77)  评论(0)    收藏  举报