在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页面刷新,数据丢失的问题
Nov 24 Vue.js
vue实现广告栏上下滚动效果
Nov 26 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue3使用vue-router的完整步骤记录
Jun 20 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 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
phpmyadmin操作流程
2006/10/09 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
微信小程序实现蓝牙打印
2019/09/23 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
python3.x 将byte转成字符串的方法
2018/07/17 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
视光学专业毕业生推荐信
2013/10/28 职场文书
银行职业规划书范文
2013/12/28 职场文书
高中军训感言200字
2014/02/23 职场文书
聚美优品励志广告词
2014/03/14 职场文书
新年寄语大全
2014/04/12 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
物流管理专业求职信
2014/05/29 职场文书
中学教代会开幕词
2016/03/04 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server