父组件与子组件的属性透传

透传是vue中一种特性,官方的解释是:“透传 attribute”指的是传递给一个组件,却没有被该组件声明为 props 或 emits 的 attribute 或者 v-on 事件监听器。最常见的例子就是 classstyleid。这句话解释过来就是一些不被prop定义的属性直接添加到子组件上的时候,子组件是可以获取到的,只不过获取的方式是通过方法获取的,下面我们展开说一下

规则 

父组件在使用子组件的时候,如何“透传属性和事件”给子组件呢?

透传属性和事件并没有在子组件中用props和emits声明
透传属性和事件最常见的如@click和class、id、style 
当子组件只有一个根元素时,透传属性和事件会自动添加到该根元素上;如果根元素已有class或style属性,它会自动合并                       

1、透传的属性只会直接传给单根节点的组件,如果子组件不是一个根节点,那么透传属性会直接失效,并且警告 

举列:

我有一个父组件App.vue

<template><div><!--在子组件中添加两个属性 id和class,如果子组件ChildModule只存在一个单根节点的元素,并且ChildModule中没有用props来接收id和class,那么这个di和class,就会传递给Navbar节点的根节点--><ChildModule id="box" class="aaa"></ChildModule></div>
</template>
<script>
import ChildModule from "./components/ChildModule.vue" //导入ChildModule组件模板
export default{data(){},components:{ChildModule:ChildModule //注册局部子组件ChildModule:也可以写成ChildModule:ChildModule}
}
</script>

案列1:透传的属性只会直接传给单根节点的组件

子组件

<template><!-- 此组件只有一个div的根节点(注意:<template></template>不是节点,它不会显示在界面上的) --><!-- 所以从父组件传递过来的id,class,style就会被此根节点接收 --><div><button>提交</button></div>
</template>

查看F12元素可以体现

案列2:如果子组件不是一个根节点,那么透传属性会直接失效,并且警告

如果子组件存在两个根组件的情况下则透传会被失效

<template><!-- 注意:<template></template>不是节点,它不会显示在界面上的 --><!-- 因为子组件不是一个根节点,它有两个根节点d,透传属性会直接失效,并且警告 --><div> <!--根节点1--><button>提交</button></div><div> </div><!--根节点2-->
</template>

查看F12元素可以体现

 案列3:子组件中用props接收的属性传透属性会直接失效

<template><!-- 此组件只有一个div的根节点(注意:<template></template>不是节点,它不会显示在界面上的) --><!-- 因为script中用props接收了class属性,但是没接收id属性,所以id属性会被透传到此根节点 --><div> <!--根节点1--><button>提交</button></div>
</template>
<script>
export default{
props:["class"]}
</script>

查看F12元素可以体现

案列4:透传过去的属性如果和子组件上的命名或属性重复了,会会以子组件本身的属性为主或追加

透传过去的属性如果和子组件上的命名重复了,会以子组件本身的属性为主(id)
透传过去的属性如果和子组件上的属性重复了,会直接添加到属性值的后面(style,class)

<template><!-- 此组件只有一个div的根节点(注意:<template></template>不是节点,它不会显示在界面上的) --><!-- 透传过去的属性如果和子组件上的命名重复了,会以子组件本身的属性为主 --><!-- 透传过去的属性如果和子组件上的属性重复了,会直接添加到属性值的后面 --><div id="wowo" class="bbb"><button>提交</button></div>
</template>

查看F12元素可以体现

2、透传事件

案列

父组件

<template><div><!--在子组件中添加两个属性 id和class,如果子组件ChildModule只存在一个单根节点的元素,并且ChildModule中没有用props来接收id和class,那么这个di和class,就会传递给Navbar节点的根节点--><ChildModule id="box" class="aaa" @click="handelClick()"></ChildModule></div>
</template>
<script>
import ChildModule from "./components/ChildModule.vue" //导入ChildModule组件模板
export default{data(){},components:{ChildModule:ChildModule //注册局部子组件ChildModule:也可以写成ChildModule:ChildModule},methods:{handelClick(){console.log("1111")}}
}
</script>

 子组件

<template><!-- 注意:<template></template>不是节点,它不会显示在界面上的 --><!-- 因为子组件不是一个根节点,它有两个根节点d,透传属性会直接失效,并且警告 --><div> <!--根节点1--><button>提交</button></div>
</template>

点击提交的时候,会发现打印出了: 22222,说明,父组件的handelClick事件也传递给了子组件的根节点。子组件根节点也就有了这个绑定事件。(其规则也是与透传属性是一样的)

3、禁止透传

父组件

<template><div><!--在子组件中添加两个属性 id和class,如果子组件ChildModule只存在一个单根节点的元素,并且ChildModule中没有用props来接收id和class,那么这个di和class,就会传递给Navbar节点的根节点--><ChildModule id="box" class="aaa" @click="handelClick()"></ChildModule></div>
</template>
<script>
import ChildModule from "./components/ChildModule.vue" //导入ChildModule组件模板
export default {data() {return {}},components: {ChildModule: ChildModule //注册局部子组件ChildModule:也可以写成ChildModule:ChildModule},methods: {handelClick() {console.log("1111")}}
}
</script>

添加 inheritAttrs:false可以禁止透传

子组件

<template><!-- 此组件只有一个div的根节点(注意:<template></template>不是节点,它不会显示在界面上的) --><!-- 透传过去的属性如果和子组件上的命名重复了,会以子组件本身的属性为主 --><!-- 透传过去的属性如果和子组件上的属性重复了,会直接添加到属性值的后面 --><div id="wowo" class="bbb" ><button>提交</button></div>
</template>
<script>
export default{//禁止透传:在子组件中添加inheritAttrs为false,则父组件的属性和事件不会被透传到子组件//虽然指定了 inheritAttrs:false 但是子组件仍然可以通过 v-bind="$attrs"来得到负组件透传过来的属性和事件inheritAttrs:false,
}
</script>

虽然指定了 inheritAttrs:false 但是子组件仍然可以通过 v-bind="$attrs"来得到父组件透传过来的属性和事件

子组件

<template><!-- 此组件只有一个div的根节点(注意:<template></template>不是节点,它不会显示在界面上的) --><!-- 透传过去的属性如果和子组件上的命名重复了,会以子组件本身的属性为主 --><!-- 透传过去的属性如果和子组件上的属性重复了,会直接添加到属性值的后面 --><div id="wowo" class="bbb" ><button v-bind="$attrs">提交</button></div>
</template>
<script>
export default{//禁止透传:在子组件中添加inheritAttrs为false,则父组件的属性和事件不会被透传到子组件//虽然指定了 inheritAttrs:false 但是子组件仍然可以通过 v-bind="$attrs"来得到负组件透传过来的属性和事件inheritAttrs:false,
}
</script>

查看F12元素可以体现(点击button可以发现button已经绑定了handelClick事件,打印了1111)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷Flink(完)FlinkSQL

&#x1f9d9;FlinkSQL&#x1f3c2;&#x1f93a; Table API 和 SQL 是最上层的 API&#xff0c;在 Flink 中这两种 API 被集成在一起&#xff0c;SQL 执行的对象也是Flink 中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。 SQL API 是基于…

短视频矩阵系统源头开发

一、智能剪辑、矩阵分发、无人直播、爆款文案于一体独立应用开发 抖去推----主要针对本地生活的----移动端(小程序软件系统&#xff0c;目前是全国源头独立开发)&#xff0c;开发功能大拆解分享&#xff0c;功能大拆解&#xff1a; 7大模型剪辑法&#xff08;数学阶乘&#x…

openHarmony UI开发

常用组件和布局方式 组件 ArkUI有丰富的内置组件&#xff0c;包括文本、按钮、图片、进度条、输入框、单选框、多选框等。和布局一样&#xff0c;我们也可以将基础组件组合起来&#xff0c;形成自定义组件。 按钮&#xff1a; Button(Ok, { type: ButtonType.Normal, stateEf…

C# Onnx Yolov8 Detect 烟雾检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

用Python解析HTML页面

用Python解析HTML页面 文章目录 用Python解析HTML页面HTML 页面的结构XPath 解析CSS 选择器解析简单的总结 在前面的课程中&#xff0c;我们讲到了使用 request三方库获取网络资源&#xff0c;还介绍了一些前端的基础知识。接下来&#xff0c;我们继续探索如何解析 HTML 代码&…

Python超入门(5)__迅速上手操作掌握Python

# 20.列表# 一维列表 names [Hash, Bob, Nick] print(names) # 全打印 print(names[:]) # 全打印 print(names[1:3]) # 打印1到2号索引 print(names[:2]) # 打印0到1号索引[Hash, Bob, Nick] [Hash, Bob, Nick] [Bob, Nick] [Hash, Bob]# 二维列表:一维列表中嵌套一维列表…

R语言:因子分析 factor analysis

文章目录 因子分析数据集处理步骤主成分法做因子分析最大似然法做因子分析 因子分析 因子分析的用途与主成分分析类似&#xff0c;它也是一种降维方法。由于因子往往比主成分更易得到解释&#xff0c;故因子分析比主成分分析更容易成功&#xff0c;从而有更广泛的应用。 从方法…

微前端二:qiankun

qiankun是基于Single-spa开发的框架&#xff0c;所以我们先来看下Single-spa是怎么做的&#xff1a; Single-spa 是最早的微前端框架&#xff0c;兼容多种前端技术栈&#xff0c;是一个将多个单页面应用聚合为一个整体应用的 JavaScript 微前端框架&#xff1b; 优点&#xf…

APP应用开发sdk版本过低可能性原因问题排查及解决方案

同学们&#xff0c;在移动 app 开发中&#xff0c;提示sdk版本过低缺找不到原因的情况都知道的吧哈哈哈&#xff0c;这个我觉得我有必要全面的分析和排查&#xff0c;让同学们看完这个文章都得以解决。这是我的初衷奈何地主家里也没有余粮呀&#xff08;我也不能完全总结出来&a…

《动手学深度学习 Pytorch版》 8.7 通过时间反向传播

8.7.1 循环神经网络的梯度分析 本节主要探讨梯度相关问题&#xff0c;因此对模型及其表达式进行了简化&#xff0c;进行如下表示&#xff1a; h t f ( x t , h t − 1 , w h ) o t g ( h t , w o ) \begin{align} h_t&f(x_t,h_{t-1},w_h)\\ o_t&g(h_t,w_o) \end{ali…

用 Python 这样去创建词云不是更美嘛?

什么是词云&#xff1f;在网络上我们经常可以看到一张图片&#xff0c;上面有一大堆大小不一的文字&#xff0c;这便是词云。词云一般是根据输入的大量词语生成的&#xff0c;如果某个词语出现的次数越多&#xff0c;那么相应的大小就会越大。 Python 中有一个专门用来生成词云…

智慧公厕:打造未来城市公共设施的智慧选择

随着信息技术的不断发展&#xff0c;城市公共设施需要实现个性化、高效化和智能化&#xff0c;其中包括公共厕所。智慧公厕是一种结合物联网、互联网、人工智能、云计算、大数据和传感感知等技术的新型公厕&#xff0c;旨在提高公共厕所管理效率、跨区域跨系统的联网管理、自动…

【C++入门 一 】学习C++背景、开启C++奇妙之旅

目录 1.什么是C2. C的发展史3. C的重要性3.1 语言的使用广泛度3.2 在工作领域1. 操作系统以及大型系统软件开发2. 服务器端开发3. 游戏开发4. 嵌入式和物联网领域5. 数字图像处理6. 人工智能7. 分布式应用 3.3 在校招领域3.3.1 岗位需求3.3.2 笔试题 4. 如何学习C4.1 别人怎么学…

WAL 模式(PostgreSQL 14 Internals翻译版)

性能 当服务器正常运行时&#xff0c;WAL文件不断被写入磁盘。但是&#xff0c;这些写操作是顺序的:几乎没有随机访问&#xff0c;因此即使是HDD也可以处理这个任务。由于这种类型的加载与典型的数据文件访问非常不同&#xff0c;因此有必要为WAL文件设置一个单独的物理存储&a…

数据结构之堆

目录 前言 堆的概念与结构 堆的实现 堆的初始化 堆的销毁 堆的显示 堆的插入 堆的向上调整算法 堆的删除 堆的向下调整算法 堆的判空 获取堆顶元素 堆的数据个数 堆的创建 前言 二叉树的顺序结构存储即使用数组存储&#xff0c;而数组存储适用于完全二叉树&#xf…

【具身智能综述1】A Survey of Embodied AI: From Simulators to Research Tasks

论文标题&#xff1a;A Survey of Embodied AI: From Simulators to Research Tasks 论文作者&#xff1a;Jiafei Duan, Samson Yu, Hui Li Tan, Hongyuan Zhu, Cheston Tan 论文原文&#xff1a;https://arxiv.org/abs/2103.04918 论文出处&#xff1a;IEEE Transactions on E…

柯桥银泰附近有学德语的地方吗,留学德语培训

01 die Garantiefr jemandem/etwas 给某人或某事的保障 Das System bietet die Garantie fr die Bauer. 02 der Gebrauch von etwas 使用某物 Wir haben den Gebrauch vom Computer gelerbt. 我们学会了使用电脑。 03 Die Geduld mit jemandem/etwas 对..的耐心 Der Lehre…

智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台

一、方案背景 我国江河湖泊众多&#xff0c;水系发达。伴随着经济社会快速发展&#xff0c;水生态水环境问题成为群众最关注的民生议题之一。一些河流开发利用已接近甚至超出水环境承载能力&#xff0c;一些地区废污水排放量居高不下&#xff0c;一些地方侵占河道、围垦湖泊等…

如何在不恢复出厂设置的情况下解锁 Android 手机密码?

如何在不恢复出厂设置的情况下解锁 Android 手机密码&#xff1f; 当您忘记 Android 手机的密码时&#xff0c;可能会有压力&#xff0c;尤其是当您不想恢复出厂设置并删除所有数据时。但是&#xff0c;有一些方法可以在不诉诸如此激烈的步骤的情况下解锁手机。我们将在这篇文…

数据仓库扫盲系列(1):数据仓库诞生原因、基本特点、和数据库的区别

数据仓库的诞生原因 随着互联网的普及&#xff0c;信息技术已经深入到各行各业&#xff0c;并逐步融入到企业的日常运营中。然而&#xff0c;当前企业在信息化建设过程中遇到了一些困境与挑战。 1、历史数据积存。 过去企业的业务系统往往是在较长时间内建设的&#xff0c;很…