当前位置: 首页 > article >正文

VUE之组件通信(二)

1、v-model

v-model的底层原理:是:value值和@input事件的结合

$event到底是啥?啥时候能.target

  • 对于原生事件,$event就是事件对象 ,能.target
  • 对应自定义事件,$event就是触发事件时,所传递的数据,不能.target
<template>
  <div class="father">
    <h3>父组件</h3>
    <!-- v-model用在html标签上-->
    <input type = "text" v-model="username">
    <!-- 双向绑定 -->
    <!-- <input type="text" :value="username" @input="username=(<HTMLInput Element>$event.target).value">-->

    <!-- v-model用在组件标签上-->
    <AtMyInput v-model="username" />
    <!--等价于下面-->
    <AtMyInput 
      :modelValue="username"
      @update:modelValue="username = $event"

    />
    

    <!-- 修改modelvalue -->
    <AtMyInput v-model:qwe="username" />
  <div>
</template>

<script setup lang="ts" name="Father">
  import {ref} from "vue";

  // 数据

  let username = ref('zhangsan')


</script>


>> AtMyInput.vue


<template>
  <input type="text" 
  <!-- :value = "modelValue" -->
   :value = "qwe"
   <!-- @input="emit('update:modelValue',(<HTMLInput Element>$event.target).value)"> -->
@input="emit('update:qwe',(<HTMLInput Element>$event.target).value)">
</template>

<script setup lang="ts" name="AtMyInput">
  <!-- defineProps(['modelValue'])-->
defineProps(['qwe'])
  <!--  const emit = defineEmits(['update:modelValue']) -->
  const emit = defineEmits(['update:qwe'])
</script>

2、$attrs

1、概述:$attrs用于实现当前组件的父组件,向当前组件的子组件通信(祖->孙)

2、具体说明:$attrs是一个对象,包含所有父组件传入的标签属性。

注意:$attrs会自动排除props中声明的属性(可以认为声明过的props被子组件自己“消费”了)

<template>
  <div class = "father">
   <h3>父组件</h3>
   <h4>a:{
  
  {a}} </h4>
   <h4>b:{
  
  {b}} </h4>
   <h4>c:{
  
  {c}} </h4>
   <h4>d:{
  
  {d}} </h4>
   <Child :a="a" :b="b" :c="c" :d="d" v-bind="{x:100,y:200}" :updateA="updateA"/>
  </div>
</template>

<script setup lang="ts" name="Father">
  import Child from './Child.vue'
  import {ref} from 'vue'

  let a = ref(1)
  let b = ref(2)
  let c = ref(3)
  let d = ref(4)

  function updateA(value:number){
    a.value += value
  }
</script>
<template>
  <div class = "child">
   <h3>子组件</h3>
   <h4>a:{
  
  {a}} </h4>
   <GrandChild v-bind="$attrs"/>
  </div>
</template>

<script setup lang="ts" name="Child">
  import GrandChild from './GrandChild.vue'
  defineProps(['a'])
</script>
<template>
  <div class = "father">
   <h3>孙组件</h3>
   <h4>a:{
  
  {a}}</h4>
   <h4>b:{
  
  {b}}</h4>
   <h4>c:{
  
  {c}}</h4>
   <h4>d:{
  
  {d}}</h4>
   <h4>x:{
  
  {x}}</h4>
   <h4>y:{
  
  {y}}</h4>
   <button @click="updateA(6)">点我将爷爷那的a进行更新</button>
   <Child/>
  </div>
</template>

<script setup lang="ts" name="Father">
  import Child from './Child.vue'
  defineProps(['a','b','c','d','x','y','updateA'])

</script>

http://www.kler.cn/a/535884.html

相关文章:

  • MFC 的 CListCtrl 控件,使用SetItemState 方法来设置选中某个 item,如何达到效果和鼠标点击一致
  • nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装
  • 【3】高并发导出场景下,服务器性能瓶颈优化方案-文件压缩
  • Ubuntu 20.04配置网络
  • UG NX二次开发(Python)-API函数介绍与应用实例(三)-UFLayer类操作
  • Linux 源码编译安装httpd 2.4,提供系统服务管理脚本并测试
  • Git 分支管理策略与实践
  • 怎麼在Chrome中設置代理伺服器?
  • MySQL 进阶专题:索引(索引原理/操作/优缺点/B+树)
  • 责任链模式(Chain Responsibility)
  • 深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战
  • HbuilderX中,实现Gzip的两种方法
  • 【数据结构-Trie树】力扣720. 词典中最长的单词
  • android 打包AAR-引入资源layout-安卓封包
  • 网络计算机的五个组成部分
  • 2.5-数据结构:AVL树
  • DeepSeek 开源模型全解析(2024.1.1–2025.2.6)
  • 2025年2月6日(anaconda cuda 学习 基本命令)
  • 《ISO/SAE 21434-2021 道路汽车--网络安全工程》标准解读
  • 大模型的底层逻辑及Transformer架构
  • multisim入门学习设计电路
  • react18新增了哪些特性
  • ASP.NET Core中Filter与Middleware的区别
  • C++_数据结构_AVL树
  • mysql 数据导出到文件
  • Android 单例模式:实现可复用数据存储