【Vue3】3-4 : 组件的属性与事件是如何进行处理的

本文详细介绍了组件通信中的四个关键特性:不通过props接收属性的直接挂载、不通过emits接收事件的直接挂载、inheritAttrs阻止属性和事件挂载以及$attrs用于父子组件间的属性和事件传递。通过实例演示了这些特性的使用和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本书目录:点击进入

一、组件通信特征

1.1 特征一 : 不通过props接收属性,会直接挂载到组件容器上

>  实操

注释 props: ['title'] 前

注释 props: ['title'] 后

> 效果

1.2 特征二 : 不通过emits接收事件,会直接挂载到组件容器上

> 实操:在组件上定义handleClick事件,点击组件触发打印当前目标

> 效果

1.3  特征三 : inheritAttrs:true 选项阻止属性和事件挂载

>  实操

>  效果

1.4  特征四 : 可通过 $attrs 内置语法,给指定元素传递属性和事件

>  实操

>  效果 


一、组件通信特征

1.1 特征一 : 不通过props接收属性会直接挂载到组件容器上

>  实操

注释 props: ['title'] 前
  • props接收title,所以title在组件中不显示

  • class没有被接收,所以在组件中显示

注释 props: ['title'] 后
  • title,class 均在组件中显示,即 属性会直接挂载到组件容器上

> 效果

1.2 特征二 : 不通过emits接收事件会直接挂载到组件容器上

  • 现象:通过props接收属性,在组件容器上会隐藏

> 实操:在组件上定义handleClick事件,点击组件触发打印当前目标

> 效果

1.3  特征三 : inheritAttrs:true 选项阻止属性和事件挂载

>  实操

>  效果

  • title,class 属性不会挂载

  • handleClick 事件不挂载

1.4  特征四 : 可通过 $attrs 内置语法,给指定元素传递属性和事件

  • 适合父子通讯

实例中:

  • 父组件:<my-head> 

  • 子组件:<header>

  • $attrs 将父组件的 title、class、@click 传递给 子组件

>  实操

<div id="app">
    <my-head title="hello world" class="box" @click="handleClick"></my-head>
</div>
<script>
    let app = Vue.createApp({
      data(){
        return {
        }
      },
      methods: {
        handleClick(ev){
          console.log(ev.currentTarget);
        }
      }
    })
    app.component('MyHead', {
      template: `
        <header>
          <h2 v-bind:title="$attrs.title">logo</h2>
          <ul v-bind:class="$attrs.class">
            <li>首页</li>
            <li>视频</li>
            <li>音乐</li>
          </ul>
        </header>
      `,
      mounted(){
        console.log( this.$attrs );   // 也可以完成父子通信操作
      },
      inheritAttrs: false   // 阻止默认的属性传递到容器的操作
    });
    let vm = app.mount('#app');
</script>

>  效果 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ladymorgana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值