补充组件通信
This commit is contained in:
parent
4662ac60e1
commit
9a33901803
@ -1,6 +1,20 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { RouterLink, RouterView } from 'vue-router'
|
import { RouterLink, RouterView } from 'vue-router'
|
||||||
import HelloWorld from './components/HelloWorld.vue'
|
import HelloWorld from './components/HelloWorld.vue'
|
||||||
|
import { provide, ref } from 'vue';
|
||||||
|
|
||||||
|
const title = ref('You did it')
|
||||||
|
|
||||||
|
const username = ref('will')
|
||||||
|
provide('username', username)
|
||||||
|
|
||||||
|
// v-mode 帮你处理来
|
||||||
|
// update:modelValue
|
||||||
|
// @update:modelValue=changedHandler
|
||||||
|
// const changedHandler = (v) => {
|
||||||
|
// title.value = v
|
||||||
|
// }
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -8,9 +22,11 @@ import HelloWorld from './components/HelloWorld.vue'
|
|||||||
<img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
|
<img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
|
||||||
|
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<HelloWorld msg="You did it, this is my arg!" />
|
<!-- modelValue -->
|
||||||
|
<HelloWorld v-model:msg="title" />
|
||||||
<!-- <component></component> -->
|
<!-- <component></component> -->
|
||||||
|
<hr>
|
||||||
|
<input style="width: 400px;" v-model="username" type="text">
|
||||||
<nav>
|
<nav>
|
||||||
<RouterLink to="/">Home</RouterLink>
|
<RouterLink to="/">Home</RouterLink>
|
||||||
<RouterLink to="/about">About</RouterLink>
|
<RouterLink to="/about">About</RouterLink>
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
|
import { inject, ref, watch } from 'vue';
|
||||||
|
|
||||||
// func XXXX(msg: string)
|
// func XXXX(msg: string)
|
||||||
const pros = defineProps({
|
const pros = defineProps({
|
||||||
msg: {
|
msg: {
|
||||||
@ -9,6 +12,24 @@ const pros = defineProps({
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 通过父组件, 修改msg, 回调函数/事件
|
||||||
|
// {'changed': fn, 'xxxx': fn}
|
||||||
|
// @changed=()=>{} @xxxx=()=>{}
|
||||||
|
// emit 事件总线 emit('changed', x, y, z)
|
||||||
|
// 调用事件总线,发送事件
|
||||||
|
// fn(args)
|
||||||
|
const emit = defineEmits(['update:msg'])
|
||||||
|
|
||||||
|
const inputText = ref(pros.msg)
|
||||||
|
watch(inputText, (v, ov)=> {
|
||||||
|
emit("update:msg", v)
|
||||||
|
}, {immediate: true})
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
const username = inject('username')
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -19,6 +40,9 @@ const pros = defineProps({
|
|||||||
<a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> +
|
<a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> +
|
||||||
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>.
|
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>.
|
||||||
</h3>
|
</h3>
|
||||||
|
<input style="width: 400px;" v-model="inputText" type="text">
|
||||||
|
<hr>
|
||||||
|
<span>username: {{ username }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user