vue子组件改变父组件的值

   

1、父组件传值给子组件,首先在父组件声明值。

 

 

2、引用子组件的时候将值用属性的方式传递给子组件。

 

 

3、子组件用props接收来自父组件的值 。 

 

4、子组件可以直接使用接收到的值。

 

 

5、如果子组件要修改来自父组件的值,不能直接修改,要通过事件进行修改

    首先子组件中点击事件绑定方法,

   

 

    方法调用$emit()事件,通过这个方法发送请求给父组件,

   

 

     同时这个方法有两个参数,第一个是方法名(此方法名在父组件中用到)。第二个是父组件中方法的参数。

    父组件绑定方法接收这个请求。(绑定的方法要和子组件传来的方法一样,即父组件中@后面的方法要个子组件中$emit()中的第一个参数一样)

   

 

    同时在methods中定义这个方法,方法体中做数据处理。

   

 

6、因为vue是双向数据绑定,因此数据更新的时候页面上也会即时进行更新

7、本文中给出案例是每点击一次按钮数字+1,按钮在子组件中,数字初始化在父组件中,数字在父子组件中都有展示

 

 代码如下

父组件代码

<template>
  <div style="border: 1px solid black;padding: 5px">
    <h1>this is component1</h1>
    <h2>我是父组件的data:我现在在父组件里面{{data}}</h2>

    <!--通过属性传递给子组件-->
    <!--通过方法改变改变值-->
    <component2
      :data="data"
      @changeComponent1Data="component1DataChange"
    >
    </component2>

  </div>
</template>

<script>
  import component2 from './component2'

  export default {
    name: "component1",
    components: {
      component2
    },
    data() {
      return {
        data: 0
      }
    },
    methods: {
      /**
       * 父组件处理子组件发送的数据更改
       * @param params
       */
      component1DataChange(params) {
        this.data += params;
      }
    }
  }
</script>

<style scoped>

</style>

 

 

子组件代码

<template>
  <div style="border: 1px dashed red">
    <h1>this is component2</h1>

    <!--直接使用接受到的值-->
    <h2>我是子组件接收到的父组件的data:我现在在子组件里面{{data}}</h2>

    <!--绑定要求改变父组件值的事件-->
    <el-button
      type="primary"
      @click="changeData"
    >
      点我改变父组件的值
    </el-button>

  </div>
</template>
<script>
  export default {
    name: "component2",
    components: {},
    props: {
      //接收父组件传来的值
      data: Number
    },
    data() {
      return {}
    },
    methods: {
      /**
       * 通过方法请求给父组件改变值
       */
      changeData() {
        this.$emit("changeComponent1Data", 1)
      }
    }
  }
</script>

<style scoped>

</style>

 

效果图如下

 

posted @ 2019-05-14 15:33  但丿行好事  阅读(68965)  评论(0编辑  收藏  举报