在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 07 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 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/04 日漫
怎样辨别一杯好咖啡
2021/03/03 新手入门
php多文件上传实现代码
2014/02/20 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP类型约束用法示例
2016/09/28 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
自己使用总结Python程序代码片段
2015/06/02 Python
bpython 功能强大的Python shell
2016/02/16 Python
Django csrf 验证问题的实现
2018/10/09 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
详解python读取和输出到txt
2019/03/29 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
夜大自我鉴定
2013/10/31 职场文书
学校七一活动方案
2014/01/19 职场文书
合作经营协议书
2014/04/17 职场文书
大型会议策划方案
2014/05/17 职场文书
供用电专业求职信
2014/07/07 职场文书
单位租房协议书范本
2014/12/04 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书