vue 组件之间通信的多种方案(1)

一、$emit()、props通信(多用于父子组件之间通信)

  1、父组件向子组件传值

  父组件引用子组件,在子组件标签利用 v-bind 向子组件传值 

  <div id="app">
     <child :value="value"></child>
  </div>

  子组件通过 props 属性接收父组件传递过来的参数

<template>
  <div class="child">
    {{`父 => 子传值:${value}`}}
  </div>
</template>

<script>
export default {
  name: "Child",
  props: {
    value: {
      type: Number,
      default: 0
    }
  }
}
</script>

  2、子组件向父组件传值

  子组件通过 $emit(“funcationName”, value) 将需要传递的value,通过“funcationName”映射给父组件

<template>
  <div class="child">
    <input type="text" v-model="value" @input="change">
  </div>
</template>

<script>
export default {
  name: "Child",
  data() {
    return {
      value: null
    }
  },
  methods: {
    change() {
      const { value } = this;
      this.$emit('getValue', { value });
    }
  }
}
</script>

  父组件在子组件标签中监听$emit()映射的方法名,通过方法传参的形式获取value

<template>
  <div id="app">
    <child @getValue="setValue"></child>
  </div>
</template>

<script>
import Child from '@/components/Child'
export default {
  name: "App",
  components: {
    Child
  },
  methods: {
    setValue({ value }) {
      console.log(value)
    }
  }
};
</script>

  也可以通过$emit() 传递方法(vue 提供 $on 事件传递方法)

  子组件methods

    change() {
      const { myFunction } = this;
      this.$emit('getValue', { myFunction });
    },
    myFunction() {
      console.log(this)
    }

  父组件接收

  methods: {
    setValue({ myFunction: childFunction }) {
      childFunction();
    }
  }
posted @ 2020-11-27 17:59  eightabs  阅读(95)  评论(0编辑  收藏  举报