美文网首页让前端飞Web前端之路
vuejs填坑-父子组件之间的访问

vuejs填坑-父子组件之间的访问

作者: 翻滚的前端程序员 | 来源:发表于2017-04-10 18:36 被阅读8690次

有时候我们需要父组件访问子组件,子组件访问父组件,或者是子组件访问根组件。

1. 父组件访问子组件 $children或$ref

$children 返回所有子组件的实例,是一个数组

<div id="count">
    <button @click="showmsg">
      显示两个组件的信息
    </button>
        <child1></child1>
    <child2></child2>
    </div>
<template id="child1">
  <div>
    {{ msg }}
  </div>
</template>
<template id="child2">
  <div>
    {{ msg }}
  </div>
</template>
<script>
    Vue.component('child1', {
      template: '#child1',
      data () {
        return {
          msg: '这是子组件1的信息'
        }
      }
    })
    Vue.component('child2', {
      template: '#child2',
      data () {
        return {
          msg: '这是子组件2的信息'
        }
      }
    })
    new Vue({
      el: '#count',
      data: {
        
      },
      methods: {
        showmsg () {
            for(var i = 0; i < this.$children.length; i++) {
            alert(this.$children[i].msg)
          }
        }
      }
    })
</script>

在线demo

$ref 有时候组件过多的话,就很记清各个组件的顺序与位置,所以通过给子组件一个索引ID

<div id="count">
        <button @click="showmsg">
      显示两个组件的信息
    </button>
        <child1 ref='c1'></child1>
    <child2 ref='c2'></child2>
    </div>
<template id="child1">
  <div>
    {{ msg }}
  </div>
</template>
<template id="child2">
  <div>
    {{ msg }}
  </div>
</template>
<script>
    Vue.component('child1', {
      template: '#child1',
      data () {
        return {
          msg: '这是子组件1的信息'
        }
      }
    })
    Vue.component('child2', {
      template: '#child2',
      data () {
        return {
          msg: '这是子组件2的信息'
        }
      }
    })
    new Vue({
      el: '#count',
      data: {
        
      },
      methods: {
        showmsg () {
            alert(this.$refs.c1.msg)
          alert(this.$refs.c2.msg)
        }
      }
    })
</script>

在线demo

2. 子组件访问父组件 $parent

<div id="count">
    父组件中的msg: {{ msg }}
        <child1 ref='c1'></child1>
    <child2 ref='c2'></child2>
    </div>
<template id="child1">
  <div>
    {{ msg }}
    <button @click="showpmsg">
      显示父组件msg
    </button>
  </div>
</template>
<template id="child2">
  <div>
    {{ msg }}
  </div>
</template>
<script>
    Vue.component('child1', {
      template: '#child1',
      data () {
        return {
          msg: '这是子组件1的信息'
        }
      },
      methods: {
        showpmsg () {
                alert(this.$parent.msg)
        }
      }
    })
    Vue.component('child2', {
      template: '#child2',
      data () {
        return {
          msg: '这是子组件2的信息'
        }
      }
    })
    new Vue({
      el: '#count',
      data: {
        msg: 'hello parent'
      }
    })
</script>

在线demo

3. 子组件访问根组件 $root 当前组件树的根 Vue 实例。如果当前实例没有父实例,此实例将会是其自已。

<div id="count">
    父组件中的msg: {{ msg }}
        <child1 ref='c1'></child1>
    <child2 ref='c2'></child2>
    </div>
<template id="child1">
  <div>
    {{ msg }}
    <cchild></cchild>
  </div>
</template>
<template id="child2">
  <div>
    {{ msg }}
  </div>
</template>
<template id="cchild">
  <div>
    <button @click="showroot">
      showrootmsg
    </button>
  </div>
</template>
<script>
    Vue.component('child1', {
      template: '#child1',
      data () {
        return {
          msg: '这是子组件1的信息'
        }
      },
      methods: {
        showpmsg () {
                alert(this.$parent.msg)
        }
      }
    })
    Vue.component('child2', {
      template: '#child2',
      data () {
        return {
          msg: '这是子组件2的信息'
        }
      }
    })
    Vue.component('cchild', {
      template: '#cchild',
      data () {
        return {
          msg: '这是子组件1的信息'
        }
      },
      methods: {
        showroot () {
                alert(this.$root.msg)
        }
      }
    })
    new Vue({
      el: '#count',
      data: {
        msg: 'hello root'
      }
    })
</script>

在线demo

Done! 1点了,晚安!

相关文章

  • vuejs填坑-父子组件之间的访问

    有时候我们需要父组件访问子组件,子组件访问父组件,或者是子组件访问根组件。 1. 父组件访问子组件 $chil...

  • 2-8 vue全局属性

    vue全局属性 父子组件之间相互访问 在开发中,组件之间需要相互访问。比如:父组件访问子组件,子组件访问父组件,或...

  • 父子组件之间的访问

    ---转载keepfool的60分钟组件快速入门(下篇) 父组件访问子组件,子组件访问父组件,或者是子组件访问根组...

  • 组件的通讯

    父子间访问子组件之间的信息(父传子) 子组件访问父组件之间的信息(子传父) 兄弟之间的传递(子传子) 父传子 子传...

  • React 组件件通信2——非父子组件间通信

    孙辈级通信 当需要让子组件跨级访问信息时候,我们可以通过之前那篇React 组件之间的通信1——之父子之间的通信那...

  • [Vue]组件之间如何通信?

    组件通信可以大致分为两种情况,父子组件之间的通信和非父子组件之间的通信,下面来分别介绍 一、父子组件之间的通信 1...

  • Vue3组件化(二):非父子组件的通信、插槽Slot

    非父子组件的通信 在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。这里我们...

  • 12.组件化开发2-非父子组件之间通信-祖先和后代之间的通信

    在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。非父子组件的通信又可以分为...

  • Vue组件通信

    Vue 组件之间的通信,通常我们遇到的都是父子组件之间的通信 一、父子组件传参 子组件定义 Props 属性; 父...

  • $bus 全局事件总线

    组件之间除了父子这种有关系的,有联系的,可以通过父子组件之间通信来实现交流除了这种父子关系的组件,还有没什么联系的...

网友评论

    本文标题:vuejs填坑-父子组件之间的访问

    本文链接:https://www.haomeiwen.com/subject/tkheattx.html