vue.js父子元素访问

当我们在使用Vue.js开发应用程序时,经常会遇到需要在父组件和子组件之间进行数据传递和通信的情况。Vue.js提供了一些机制来实现这种父子元素的访问:

  1. 父向子传递数据(通过props):

父组件:

<template>
  <div>
    <ChildComponent :message="parentMessage" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  data() {
    return {
      parentMessage: 'Hello from parent component',
    };
  },
  components: {
    ChildComponent,
  },
};
</script>

子组件:

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  props: ['message'],
};
</script>

2.子向父传递数据(通过自定义事件):

父组件:

<template>
  <div>
    <ChildComponent @childEvent="handleChildEvent" />
    {{ childData }}
  </div>
</template>

<script> 
import ChildComponent from './ChildComponent.vue';

export default { 
 data() { 
   return { 
     childData: '', 
   }; 
 }, 

 methods: { 
   handleChildEvent(data) { 
     this.childData = data; // 处理子组件传递过来的数据
   }, 
 }, 

 components: { 
   ChildComponent,  
 },  
};   
</script>   

子组件:

<template>  
<button @click="sendToParent">Send Data to Parent</button>   
</template>   

<script>     
export default {    
 methods: {      
   sendToParent() {       
     this.$emit('childEvent', 'Data from child'); // 触发自定义事件,并将数据传递给父组件
   },
 },    
};     
</script>   

3.子向兄弟传递数据(通过共同的祖先组件作为中转站):

祖先组件:

<template>
  <div>
    <ChildComponentA @sendToSibling="handleSendToSibling" />
    <ChildComponentB :siblingData="siblingData" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      siblingData: '',
    };
  },
  methods: {
    handleSendToSibling(data) {
      this.siblingData = data; // 处理来自子组件A的数据,并传递给子组件B
    },
  },
};
</script>

子组件A:

<template>
  <button @click="sendToSibling">Send Data to Sibling</button>
</template>

<script>
export default {
  methods: {
    sendToSibling() {
      this.$emit('sendToSibling', 'Data from sibling A'); // 触发自定义事件,将数据发送给祖先组件
    },
  },
};
</script>

子组件B:

<template>
  <div>{{ siblingData }}</div>
</template>

<script>
export default {
  props: ['siblingData'],
};
</script>
4.使用$parent访问父级元素:

父级元素:

<template> 
   <div> 
     {{ message }} 
     <ChildComponent /> 
   </div> 
 </template> 
 
 <script>  
 import ChildComponent from './ChildComponent.vue'; 
 
 export default {  
   data() {   
     return {    
       message: 'Hello from parent component',    
     };   
   },   
   components: {    
     ChildComponent,  
   }, 
 };  
 </script> 

子组件:

<template> 
  <div>{{ $parent.message }}</div> 
</template>

5.使用$children访问子级元素列表:

父组件: 

<template>
  <div>
    <ChildComponentA />
    <ChildComponentB />
  </div>
</template>

<script>
import ChildComponentA from './ChildComponentA.vue';
import ChildComponentB from './ChildComponentB.vue';

export default {
  components: {
    ChildComponentA,
    ChildComponentB,
  },
};
</script>
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74156068

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值