在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 22 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue实现登录功能
Dec 31 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
vue动态设置路由权限的主要思路
Jan 13 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 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执行定时任务的实现思路
2015/12/21 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
extjs render 用法介绍
2013/09/11 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python批量修改图片大小的方法
2018/07/24 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
struct和class的区别
2015/11/20 面试题
行政工作个人的自我评价
2014/02/13 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
学校宣传标语
2014/06/18 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python