在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 Elenent实现表格相同数据列合并
Nov 30 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue实现省市区联动 element-china-area-data插件
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
一个很不错的PHP翻页类
2009/06/01 PHP
php下连接mssql2005的代码
2011/01/17 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python实现通讯录功能
2018/02/22 Python
3分钟学会一个Python小技巧
2018/11/23 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python print出共轭复数的方法详解
2019/06/25 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
餐饮业会计岗位职责
2013/12/19 职场文书
汽车促销活动方案
2014/03/31 职场文书
2015年药店工作总结
2015/04/20 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis