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>
事件总线
待补充
发表回复