vue2知识点————(父子通信)

vue2的知识点,更多前端知识在主页,还有其他知识会持续更新

vue组件

在Vue.js 2.x中,父子组件之间的通信是非常常见的情况,Vue提供了多种方法来实现这种通信。

Props 父向子通信 

  • Props 是父组件向子组件传递数据的一种方式。通过在子组件的标签上使用属性绑定传递数据,然后在子组件中通过props接收这些数据。父组件通过属性传递数据,子组件通过props接收这些数据。
<!-- 父组件 -->
<template>
  <div>
    <child-component :message="parentMessage"></child-component>
  </div>
</template>

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

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

<!-- 子组件 -->
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

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

Events 子向父通信 

  • Events 是子组件向父组件通信的一种方式。子组件通过触发事件,向父组件传递消息。父组件通过监听子组件的事件来处理消息。
<!-- 父组件 -->
<template>
  <div>
    <child-component @child-event="handleChildEvent"></child-component>
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleChildEvent(message) {
      console.log('Message from child:', message);
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    <button @click="sendMessage">Send Message to Parent</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('child-event', 'Hello from child');
    }
  }
}
</script>

$refs 父向子通信 

  • refs 是父组件直接访问子组件的一种方式。通过给子组件设置‘ref‘属性,父组件可以使用‘refs是父组件直接访问子组件的一种方式。通过给子组件设置‘ref‘属性,父组件可以使用‘refs`属性来访问子组件实例。
<!-- 父组件 -->
<template>
  <div>
    <child-component ref="childRef"></child-component>
    <button @click="callChildMethod">Call Child Method</button>
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  methods: {
    callChildMethod() {
      this.$refs.childRef.childMethod();
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    <p>Child Component</p>
  </div>
</template>

<script>
export default {
  methods: {
    childMethod() {
      console.log('Method called from parent');
    }
  }
}
</script>

 兄弟之间通信 

Event Bus

  • 事件总线 是一种通过 Vue 实例作为中介来传递事件的方式。你可以创建一个全局的 Vue 实例作为事件总线,然后在其中监听事件和触发事件,从而实现兄弟组件之间的通信。
// EventBus.js
import Vue from 'vue';
export const EventBus = new Vue();

// ComponentA.vue
<template>
  <div>
    <button @click="sendMessage">Send Message to Component B</button>
  </div>
</template>

<script>
import { EventBus } from './EventBus.js';

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message-from-A', 'Hello from Component A');
    }
  }
}
</script>

// ComponentB.vue
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
import { EventBus } from './EventBus.js';

export default {
  data() {
    return {
      message: ''
    };
  },
  created() {
    EventBus.$on('message-from-A', (message) => {
      this.message = message;
    });
  }
}
</script>

Vuex

  • Vuex 是 Vue.js 的状态管理库,可以用来管理应用中的共享状态。你可以将需要共享的数据存储在 Vuex 的 store 中,然后在兄弟组件中通过 store 实现通信。
// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, payload) {
      state.message = payload;
    }
  }
});

// ComponentA.vue
<template>
  <div>
    <button @click="sendMessage">Send Message to Component B</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$store.commit('setMessage', 'Hello from Component A');
    }
  }
}
</script>

// ComponentB.vue
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  computed: {
    message() {
      return this.$store.state.message;
    }
  }
}
</script>
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值