在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使用Elementui修改默认的最快方法
Dec 05 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
vue3使用vue-router的完整步骤记录
Jun 20 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 Vue.js
Vue OpenLayer测距功能的实现
Apr 20 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
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
javascript multibox 全选
2009/03/22 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
美国翻新电子产品商店:The Store
2019/10/08 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
研究生个人学年总结
2015/02/14 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
MySQL中order by的执行过程
2022/06/05 MySQL
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技