vue多层嵌套组件/祖孙传值,嵌套组件传值: v-on="$li

2019-07-15  本文已影响0人  前端青音
image.png

在不用状态管理vuex的时候,如何让GrandFather与Son通信,我们可以用可以emit一层一层的传递会显得冗余。 vue2.4之后,提出attr、
$listeners ,可以实现跨级组件通信。

$listeners官网解说 :事件传递

$attrs官网解说:属性传递

简言之,在GrandFather中给Father传事件与属性,在Father组件中使用
v-bind="attrs" v-on="listeners",在Son组件中,就可以通过
this.attrs.属性 和 this.emit('事件')来触发从GrandFather中传入的事件

GrandFather组件
<template>
    <div id="app">
        <father :info="info" @getData="getData"></father>
    </div>
</template>

<script>
    import Father from "./Father";

    export default {
      components: {
        Father},
      name: "main-page",
      data() {
          return {
            info:'我是来自父组件'
          }
      },
      created() {},
      mounted(){},
      methods: {
         getData (val) {
           this.msg = val
        },
      }
    }
</script>
Father组件
<template>
    <son v-bind="$attrs" v-on="$listeners"></son>
</template>

<script>
    import Son from "./Son";

    export default {
      components: {Son},
      name: "son",
      props:[]
    }
</script>
Son组件
<template>
  <div>
    <h1 class="btn">{{this.$attrs.info}}</h1>
  </div>
</template>

<script>
    export default {
      name: "temp-son",
      mounted() {
        this.$emit('getData','我来自孙子组件')
      }
    }
</script>
上一篇 下一篇

猜你喜欢

热点阅读