在vue中使用inheritAttrs实现组件的扩展性介绍


Posted in Vue.js onDecember 07, 2020

1、首先我们创建一个input组件

<template>
 <div class="inputCom-wrap">
 <input v-bind="$attrs" />
 </div>
</template>
 
<script lang="ts">
import { defineComponent } from 'vue'
 
export default defineComponent({
 inheritAttrs:false,//不希望根直接继承特性,而是使用$attrs自定义继承,当前组件的根就是inputCom-wrap
 setup () {
 return {}
 }
})
</script>
 
<style scoped> 
</style>

2、使用组件的时候,随便增加一些属性,如

<inputCom type="text" class="input-a"></inputCom>

<inputCom type="password" class="input-b"></inputCom>

3、查看最终的渲染结果为(与props不会冲突)

在vue中使用inheritAttrs实现组件的扩展性介绍

补充知识:vue组件深层传值inheritAttrs、$attrs、$listeners

1、$attrs

组件深层传值 可通过父组件绑定 v-bind="$attrs"传给子组件

一般子组件this.$attrs可以拿到父组件的所有传输的属性。

当子组件props注册了声明某属性之后,this.$attrs将不包含该属性;

同理通过v-bind="$attrs"绑定孙子组件也不会包含子组件props声明的属性。

props: {
 data:{
 type: Array,
 default: () => [],//数组格式[{label:xx,value:xxx}]
 }, 
 value: {
 type: Array,
 default: () => [],//数组格式[xx,xx,xx]
 },
 maxHeight:{
 type:[String,Number],
 default:350,
 }
 },

mounted() {
 console.log("来自多选",this.$attrs)

 },

在vue中使用inheritAttrs实现组件的扩展性介绍

2、inheritAttrs

默认值为true

默认情况子组件props未声明,父组件传输的其他属性会被认作 props 的 attribute 绑定 (attribute bindings) 将会“回退”且作为普通的 HTML attribute 应用在子组件的根元素上(有可能会覆盖子组件根元素上的某些属性列如 type="text"之类属性)

子组件的inheritAttrs 设置为false可以避免

在vue中使用inheritAttrs实现组件的扩展性介绍

3、$listeners

父组件-子组件-孙子组件,现在我要你在孙子组件里改变父组件的值,子组件直接绑定

<muti-select v-bind="$attrs" v-on="$listeners" class="select"></muti-select>

以上这篇在vue中使用inheritAttrs实现组件的扩展性介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
在Vue中使用mockjs代码实例
Nov 25 Vue.js
Vue Elenent实现表格相同数据列合并
Nov 30 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
详解Vue的options
May 15 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue实现Toast组件轻提示
Apr 10 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 #Vue.js
详解Vue中的自定义指令
Dec 07 #Vue.js
vue-router定义元信息meta操作
Dec 07 #Vue.js
Vue如何实现验证码输入交互
Dec 07 #Vue.js
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 #Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 #Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 #Vue.js
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP数据缓存技术
2007/02/14 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
微信支付开发交易通知实例
2016/07/12 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
小程序自定义弹框效果
2020/11/16 Javascript
python设置检查点简单实现代码
2014/07/01 Python
python函数装饰器用法实例详解
2015/06/04 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python3中property使用方法详解
2019/04/23 Python
python实现简单五子棋游戏
2019/06/18 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
使用Pycharm分段执行代码
2020/04/15 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
某科技软件测试面试题
2013/05/19 面试题
会计员岗位职责
2014/03/15 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
毕业生对母校寄语
2015/02/26 职场文书
超市店长竞聘书
2015/09/15 职场文书
乔迁新居祝福语
2019/11/04 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫