在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项目利用axios请求接口下载excel
Nov 17 Vue.js
浅析VUE防抖与节流
Nov 24 Vue.js
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
vue实现登录功能
Dec 31 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
vue封装数字翻牌器
Apr 20 Vue.js
vue动态绑定style样式
Apr 20 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计算上一个月的今天
2013/05/23 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
python操作MongoDB基础知识
2013/11/01 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python多线程抽象编程模型详解
2019/03/20 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
python实现人工蜂群算法
2020/09/18 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
大学考试作弊检讨书
2014/01/30 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
道路施工安全责任书
2014/07/24 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
慰问信范文
2015/02/14 职场文书
行政答辩状范文
2015/05/21 职场文书
学习计划是什么
2019/04/30 职场文书