vue中$attrs的使用

  • $attrs是在vue的2.40版本以上添加的。
  • 项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。如果使用普通的父子组件传参prop和$emit,$on会很繁琐;如果使用vuex会大材小用,只是在这几个组件中使用,没必要使用vuex;使用事件总线eventBus,使用不恰当的话,有可能会出现事件多次执行。
  • 如果给组件传递的数据,组件不使用props接收,那么这些数据将作为组件的HTML元素的特性,这些特性绑定在组件的HTML根元素上
  • inheritAttrs: false的含义是不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs可以获取到没有使用的注册属性, ``inheritAttrs: false`是不会影响 style 和 class 的绑定

以上解释可能有点抽象,下面用举例来详细解释:

在不使用$attrs的情况下,在父组件中使用子组件并给子组件关联数据,子组件如果不使用props接收数据,那么这些数据就会作为普通的HTML特性应用在子组件的根元素上,也就是class="content"上,但我们想要实现的是将type属性绑定给input。

// 子组件
<template>
    // class="content"为该组件的根HTML节点
	<div class="content">
		<input />
	</div>
</template>

<script>
export default {
	props: {},
};
</script>

// 父组件调用:给子组件绑定属性,设置type类型
<myInput type="text"></myInput>
<myInput type="password"></myInput>

 如果想实现将type属性绑定给input,可以再input标签中加上v-bind="$attrs"

<template>
	<div class="content">
		<input v-bind="$attrs" />
	</div>
</template>

<script>
export default {
	props: {},
	inheritAttrs: false,
	// 不想继承所有父组件的内容,同时也不在组件根元素dom上显示属性
	// 注意props里的参数名称不能改变,必须和父组件传递过来的是一样的
};
</script>

 此时,在子组件上传递的数据成功绑定到了input上,$attrs实际上保存了所有传递给该组件的属性

在此提醒一下props和$attrs的区别:

1.props需要先声明才能获取值,而attrs则不用

2.props声明过的属性,attrs里面不会在出现

3.props不包含事件,attrs包含

4.props支持string以外的类型,而attrs只有string类型

// 子组件
<template>
	<div class="content">
		<input v-bind="$attrs" :value="value" />
		<span>{{ $attrs }}</span>
	</div>
</template>

<script>
export default {
	props: {
		value: {
			type: String,
			default: "",
		},
	},
	inheritAttrs: false,
	// 不想继承所有父组件的内容,同时也不在组件根元素dom上显示属性
	// 在本组件中需要接收从父组件传递过来的数据,注意props里的参数名称不能改变,必须和父组件传递过来的是一样的
};
</script>

// 父组件
<myInput type="text" :value="111"></myInput>
<myInput type="text" :value="222"></myInput>

 可以看出,$attrs中并不包含props中定义的属性。

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值