在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生命周期的深入理解
Dec 03 Vue.js
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
vue中watch的用法汇总
Dec 28 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 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
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
PyCharm在win10的64位系统安装实例
2017/11/26 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python使用udp实现聊天器功能
2018/12/10 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
护理专业应届毕业生推荐信
2013/11/15 职场文书
工厂实习感言
2014/01/14 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
中国世界遗产导游词
2015/02/13 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
浅谈MySQL中的六种日志
2022/03/23 MySQL
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers