在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 elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
分享一个vue实现的记事本功能案例
Apr 11 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
星际RPG字典
2020/03/04 星际争霸
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
Python OpenCV实现图片上输出中文
2018/01/22 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python3实现弹弹球小游戏
2019/11/25 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Java里面有没有全局变量?为什么?
2015/02/06 面试题
英语感恩演讲稿
2014/01/14 职场文书
中学生自我鉴定
2014/02/04 职场文书
根叔历年演讲稿
2014/05/20 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
严以律己学习心得体会
2016/01/13 职场文书
python flask框架快速入门
2021/05/14 Python
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js