在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 18 Vue.js
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
如何优化vue打包文件过大
Apr 13 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通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
使用Python编写Linux系统守护进程实例
2015/02/03 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
使用python画社交网络图实例代码
2019/07/10 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
华为的Java面试题
2014/03/07 面试题
SQL面试题
2013/12/09 面试题
答谢会策划方案
2014/05/12 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
go goroutine 怎样进行错误处理
2021/07/16 Golang
pandas数值排序的实现实例
2021/07/25 Python