补充组件通信

This commit is contained in:
yumaojun03 2025-01-05 10:15:13 +08:00
parent 4662ac60e1
commit 9a33901803
2 changed files with 42 additions and 2 deletions

View File

@ -1,6 +1,20 @@
<script setup>
import { RouterLink, RouterView } from 'vue-router'
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>
<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" />
<div class="wrapper">
<HelloWorld msg="You did it, this is my arg!" />
<!-- modelValue -->
<HelloWorld v-model:msg="title" />
<!-- <component></component> -->
<hr>
<input style="width: 400px;" v-model="username" type="text">
<nav>
<RouterLink to="/">Home</RouterLink>
<RouterLink to="/about">About</RouterLink>

View File

@ -1,4 +1,7 @@
<script setup>
import { inject, ref, watch } from 'vue';
// func XXXX(msg: string)
const pros = defineProps({
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>
<template>
@ -19,6 +40,9 @@ const pros = defineProps({
<a href="https://vite.dev/" target="_blank" rel="noopener">Vite</a> +
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>.
</h3>
<input style="width: 400px;" v-model="inputText" type="text">
<hr>
<span>username: {{ username }}</span>
</div>
</template>