1.父子组件的数据传输

阐明:此处的例子应用并不一定是最佳应用形式,仅为了验证数据的传输

父组件

<template>  <p>++++++++++++++++++<b>调用子组件</b>+++++++++++++++++++++</p>  <p>子组件调用父组件办法测试,子组件提交即可生成随机数 {{ random }}</p>  <p>在调用的子组件定义ref</p>  <hello-world :random="random" ref="greeting" @getRandom="getRandom" /></template><script>import HelloWorld from "../components/HelloWorld.vue";import { ref, computed, onMounted, provide, getCurrentInstance } from "vue";export default {  components: { HelloWorld },  setup(props, ctx) {    // **父组件获取子组件的数据**    // const的值为上体面组件定义的ref    const greeting = ref(null);    onMounted(() => {      // **父组件获取子组件的值**      console.log(greeting.value.greeting);      greeting.value.submitGreeting();      // ++++++++end+++++++++++++++++    });    // **子组件获取父组件的值和办法    // 父组件先定义函数 ==>生成随机数    let random = ref(1);    const getRandom = () => {      random.value = Math.floor(Math.random() * 100);    };    return {      random,      greeting,      getRandom,    };  },};</script>

子组件

// 次要验证vuex的应用, 和父子兄弟组件之间的交互<template>  <input    type="text"    name="greetings"    v-model="greeting"    style="margin-right: 20px"  />  <button @click="submitGreeting">提交Greeting</button></template><script>import { ref } from "vue";import { useStore } from "vuex";export default {  name: "HelloWorld",  // **子组件获取父组件的值**  props: {    random: {      type: Number,    },  },  // **子组件获取父组件传入的办法**  emits: ["getRandom"],  setup(props, ctx) {    const store = useStore();    const greeting = ref("Hello");    // 将值存入store    const submitGreeting = () => {      store.commit("submitGreeting", greeting.value);      store.commit("increment");      console.log("点击提交Greetings按钮,批改次数+1");      // ++++++++++验证子组件调用父组件的办法++++++++      // 通过emits传入的办法      ctx.emit("getRandom");      // ++++++++++++++++++end+++++++++++++++++++    };    // +++++++++++++验证父组件调用子组件的办法+++++++++++++    // 将组件中的值裸露进来, 否则父组件中无奈应用    ctx.expose({ greeting, submitGreeting });    // ++++++++++++++++++end+++++++++++++++++++    return {      greeting,      submitGreeting,    };  },};</script>

跨组件的调用(provide和)

第一层组件

<template></template><script>import { ref, provide } from "vue";export default {  setup(props, ctx) {    // 生成随机数    let random = ref(1);    const getRandom = () => {      random.value = Math.floor(Math.random() * 100);    };    // provide 和 reject 的应用    provide("user", random);    return {      random,    };  },};</script>

跨组件

// 次要验证provide 和reject 的应用<template>  <div>我只是想试下provide 和 reject 怎么用 {{ user }}</div></template><script>import { inject } from "vue";export default {  name: "Next",  setup() {    // provide传过来的值    const user = inject("user");    return {      user,    };  },};</script>

事件总线

待补充