在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 相关文章推荐
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
Vue实现简单计算器
Jan 20 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue 给数组添加新对象并赋值
Apr 20 Vue.js
Vue操作Storage本地化存储
Apr 29 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+ajax实现图片文件上传功能实例
2014/06/17 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
vue登录注册实例详解
2019/09/14 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
Python中atexit模块的基本使用示例
2015/07/08 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
python实现静态服务器
2019/09/05 Python
Python requests接口测试实现代码
2020/09/08 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
高级Java程序员面试要点
2013/08/02 面试题
车间班长岗位职责
2013/11/30 职场文书
核心价值观演讲稿
2014/05/13 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
上诉答辩状范文
2015/05/22 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
python实现简单的名片管理系统
2021/04/26 Python
如何利用pygame实现打飞机小游戏
2021/05/30 Python
opencv检测动态物体的实现
2021/07/21 Python