Vue父子组件相互通讯方法总结

别说谁变了你拦得住时间么 提交于 2020-03-11 10:04:39

转载:https://juejin.im/post/5c1370365188250f73759a79
作者:Zero游戏人生
来源:掘金

子组件调用父组件的方法:

  1、$emit

  2、$parent

  3、prop

  4、vuex(dispatch: actions => commit:mutations)

$parent方法

父组件

<template>
  <div>
    <child></child>
  </div>
</template>
<script>
  import child from '@/components/child';
  export default {
    components: {
      child
    },
    methods: {
      fatherMethod() {
        console.log('father组件');
      }
    }
  }
</script>

子组件

<template>
  <div @click="activeBtn"> </div>
</template>
<script>
  export default {
    methods: {
      activeBtn() {
        this.$parent.fatherMethod()
      }
    }
  }
</script>

$emit方法

父组件

<template>
  <div>
    <child @callFather="activeSon"></child>
  </div>
</template>
<script>
  import child from '@/components/child';
  export default {
    components: {
      child
    },
    methods: {
      fatherMethod() {
        console.log('father组件');
      },
      activeSon(){
        this.fatherMethod()
      }
    }
  }
</script>

子组件

<template>
  <div @click="activeBtn"> </div>
</template>
<script>
  export default {
    methods: {
      activeBtn() {
        this.$emit("callFather")
      }
    }
  }
</script>

 

prop方法

父组件

<template>
  <div>
    <child :activeSon="fatherMethod()"></child>
  </div>
</template>
<script>
  import child from '@/components/child';
  export default {
    components: {
      child
    },
    methods: {
      fatherMethod() {
        console.log('father组件');
      }
    }
  }
</script>

子组件

<template>
  <div @click="activeBtn"> </div>
</template>
<script>
  export default {
  props:{
    activeSon:  {
        type: Function,
        default: null
      }
  },
    methods: {
      activeBtn() {
        this.activeSon()
      }
    }
  }
</script>

父组件调用子组件中的方法、变量

通常使用$ref获取子组件的方法、变量($ref也可以用于获取某个DOM

父组件

 <component v-bind:is="userAdd" ref="addUser"></component>
import userAdd from "./components/edit";
export default {
  components: {
    userAdd
  },
  data() {
    return {
      userAdd: userAdd,
    };
  },
.....
    openNew() {
      // this.$refs.addUser.user.uType= 2;    // 调用子组件变量
      this.$refs.addUser.isEdit = false;    
      this.$refs.addUser.title = "新增用户";
      this.$refs.addUser.editDialog = true;
    },    ·

子组件

export default {
  data() {
    return {
      isEdit: false, // 是否为编辑状态,默认为false,即默认为新增
      formLabelWidth: "100px",
      editDialog: false,
      user: {
        uType: "2"
      },
      title: ""
    };
  },
......

例子:https://blog.csdn.net/qq_34664239/article/details/80386153

兄弟组件间传递DOM数据,调用函数

写一个兄弟组件之间传递数据,父组件调用方法的案例:
第一个子组件cartcont,发射数据

this.$emit('cartadd', event.target);

父组件接收数据,并将数据,通过调用另一个子组件shopcart 的方法传递给另一个子组件shopcart

<v-cartcont :food="food" @cartadd='_drop'></v-cartcont>
<v-shopcart ref='shopcart'></v-shopcart>

_drop(target){
    console.log('父组件接收数据')
    this.$refs.shopcart.drop(target);
}

shopcart子组件的方法

drop(el){
    console.log('调用另一个子组件的方法')
    console.log(el)
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!