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

网站建设与网页设计的区别wordpress分类使用不同模板

网站建设与网页设计的区别,wordpress分类使用不同模板,一个虚拟主机可以做两个网站吧,游戏代理是什么在 Vue 开发中,v-bind"$attrs" 和 v-on"$listeners" 是实现组件透传的核心工具,常用于封装高阶组件或中间层组件。但这两个看似便捷的特性,却隐藏着容易被忽视的优先级陷阱——当显式绑定与透传属性/事件同名时&#xff…

  在 Vue 开发中,v-bind="$attrs"v-on="$listeners" 是实现组件透传的核心工具,常用于封装高阶组件或中间层组件。但这两个看似便捷的特性,却隐藏着容易被忽视的优先级陷阱——当显式绑定与透传属性/事件同名时,数据和事件的流向可能完全不符合预期

一、属性与事件透传的“显式优先”原则

1. $attrs:属性透传的覆盖逻辑

v-bind="$attrs"用于批量传递父组件的非 props 属性(如 HTML 特性或未声明的 props)。但当中间层组件显式绑定同名属性时,会触发“覆盖效应”:

<!-- 父组件 -->
<MiddleComponent a="true" /><!-- 中间层组件 -->
<ChildComponent a="false" v-bind="$attrs" />
<!-- 显式绑定a="false" --><!-- 结果:ChildComponent接收到的a为false -->

优先级顺序

显式声明值 > $attrs传递的值 > 组件props默认值

显式声明值如果有多个,则最后一个声明的生效。
不要这么做

2. $listeners:事件透传的覆盖逻辑

v-on="$listeners"用于传递父组件的事件监听器。当中间层显式绑定同名事件时,父组件的事件会被屏蔽:

<!-- 父组件 -->
<MiddleComponent @click="parentClick" /><!-- 中间层组件 -->
<ChildComponent @click="middleClick" v-on="$listeners" />
<!-- 显式绑定@click --><!-- 结果:触发点击时仅执行middleClick -->

优先级顺序

显式事件绑定 > $listeners传递的事件

在触发事件的时候,检查父组件是否监听了对应的事件,如果没有就也可以执行组件内部逻辑,
如何判断父级是否监听了事件?
Vue 2:用 this.$listeners 直接检查事件监听状态。
Vue 3:通过 this.$attrs.onXxx 或 instance.attrs.onXxx 检查。
推荐场景:仅在需要条件触发事件时使用(如避免未监听的 $emit 导致控制台警告)

二、声明式优先

Vue 的组件系统遵循声明式优先原则:开发者在模板中显式声明的内容(属性、事件),优先级高于通过变量($attrs/$listeners)透传的内容。这一设计的初衷是为了让开发者更精准地控制组件行为,避免隐性数据流动导致的调试困难。

透传 vs 显式声明

场景组件代码示例父组件子组件接收到的值/事件
仅透传属性<Child v-bind="$attrs" />a=truea: true
透传+显式静态属性<Child a="false" v-bind="$attrs" />a=truea: false
仅透传事件<Child v-on="$listeners" />@click触发时执行父事件
透传+显式事件绑定<Child @click="local" v-on="$listeners" />@click触发时仅执行 local 事件

三、如何优雅控制透传逻辑

1. 属性透传

场景 1:完全透传,禁止中间层干预

需求:中间层不修改任何属性,完全传递父组件的值。
方案:移除中间层的显式绑定,仅使用v-bind="$attrs"

<ChildComponent v-bind="$attrs" />
<!-- 无显式属性 -->
场景 2:合并属性,父级优先

需求:中间层设置默认值,但允许父组件覆盖。
方案:通过计算属性合并值,利用$attrs的存在性判断优先级:

<template><ChildComponent :a="computedA" v-bind="$attrs" />
</template>
<script>export default {data() {return {middleA: "default",};},computed: {computedA() {return this.$attrs.a !== undefined ? this.$attrs.a : this.middleA;},},};
</script>

或者

<template><ChildComponent :a="a" v-bind="$attrs" />
</template>
<script>export default {props: {a: {type: String,default: true,},},};
</script>

2. 事件透传

场景 1:组合事件逻辑

需求:中间层执行自定义逻辑后,再触发父组件事件。
方案:手动调用$listeners中的事件处理函数:

<template><ChildComponent @click="handleCombinedClick" v-on="$listeners" />
</template>
<script>export default {methods: {handleCombinedClick(...arg) {this.localHandler(...arg); // 中间层逻辑this.$listeners.click?.(...arg); // 触发父组件事件// 或者通过emit 触发父组件事件this.$emit("click", ...arg);},},};
</script>

四、Vue 3 的变化:$listeners的整合

  在 Vue 3 中,$listeners被合并到$attrs中,事件监听器以onXxx的形式存在(如onClick)。此时,透传逻辑更统一:

<ChildComponent v-bind="$attrs" />
<!-- 同时传递属性和事件 -->

但优先级规则不变:显式绑定的事件(如@click)仍会覆盖$attrs中的onClick

五、总结:透传的原则

  1. 不显式绑定同名属性/事件:若需透传,中间层避免声明与父组件相同的属性名或事件名;
  2. 不依赖隐性覆盖:优先通过 props 和自定义事件显式声明交互接口;

  理解$attrs$listeners的优先级机制,组件模板中的显式绑定永远优先于透传内容——显式代码永远拥有最高控制权


文章转载自:

http://VDq94TrY.pLtbd.cn
http://JAWqpcxJ.pLtbd.cn
http://uvjxZWFx.pLtbd.cn
http://5GNNVFA3.pLtbd.cn
http://NcKBaZ5x.pLtbd.cn
http://FKeXAQko.pLtbd.cn
http://bH4e1Mkg.pLtbd.cn
http://VTg8wgm6.pLtbd.cn
http://3h0kwr82.pLtbd.cn
http://e5g38qJ5.pLtbd.cn
http://z32F0kyn.pLtbd.cn
http://dOQ7gqbM.pLtbd.cn
http://UFuE57M3.pLtbd.cn
http://7h2qjqkJ.pLtbd.cn
http://pqdOS5If.pLtbd.cn
http://Up0huRJn.pLtbd.cn
http://Tzql2WIC.pLtbd.cn
http://uqkzJB7X.pLtbd.cn
http://8sUTaTJ8.pLtbd.cn
http://lRfirj7S.pLtbd.cn
http://F2MHmq4b.pLtbd.cn
http://CMGBWrEZ.pLtbd.cn
http://ElTuuq54.pLtbd.cn
http://ifAZVsJX.pLtbd.cn
http://OOQRP8yV.pLtbd.cn
http://mKisG7sW.pLtbd.cn
http://1l1AWICk.pLtbd.cn
http://nO7COeTR.pLtbd.cn
http://eFaEHJve.pLtbd.cn
http://PGUFXoUX.pLtbd.cn
http://www.dtcms.com/wzjs/660156.html

相关文章:

  • 有经验的常州手机网站怎么建免费论坛网站
  • 平台网站建设方案标书iis 创建网站
  • 宁波网站建设设计服务公司如何做wordpress文章页
  • 建筑网站ad网站建设管理成本估计
  • 国外推广国内网站网站建设 昆明邦凯网络
  • 房产网站有哪些物业管理系统英文
  • 琼海商城网站建设潍坊住房和城乡建设局网站
  • 没有服务器如何做网站嘉鱼网站建设前十
  • 网站开发怎么挣外快百度手机助手app下载安装
  • 国外响应式网站模板新闻式软文
  • 潍坊网站建设哪家专业安卓手机优化软件排名
  • 住房与建设部网站 2018 128号智慧教育
  • 怎么做淘宝网站赚钱吗淘宝引流推广平台
  • 青海省住房和建设门户网站在线教育网站用什么做
  • 冠县网站建设价格河北商城网站建设价格
  • 在线做炫图网站淘客网站超级搜怎么做
  • 网站建设报告心得体会办公室设计公司专业网站
  • 昆山住房与城乡建设局网站网站越来越难做
  • 广州网站建设哪家便宜建设公司网站需要什么
  • 安丘网站建设公司h5免费制作软件
  • 做全屏网站图片显示不全河南开封网站建设
  • 网络公司企业网站模板网站建设技术实现难点
  • 做服饰的有哪些网站佛山百度关键词排名
  • 西宁网站建设哪家好h5响应式网站是什么意思
  • 自助网站能在百度上搜到么网站开发 在线支付
  • 网站设计思路方案网页设计与制作论文题目
  • react用于网站开发南宁网站建设培训有哪些
  • 可以做淘宝联盟的免费网站网站建设云平台
  • wordpress安装2个网站吗网站ui设计是什么
  • 如何做网站赚敬请期待下一句