Vue属性透传(Attributes)

一、透传的定义

父组件会给子组件进行属性传递,部分属性又会自动传给子组件的子组件。

二、如何传递

对于一个组件来说,透传进来属性会默认变成根元素的属性。

// MyButton组件
<div>
    <button></button>
</div>

// 使用MyButton组件
<div>
    <MyButton class='myBtn' />
</div>

// 渲染后的MyButton组件
<div class='myBtn'>
    <button></button>
</div>

这个透传属性传法和props一样(还有emit传出的方法),但是他们之间有区别,对于那些在props中定义的属性,不会透传到子组件的根元素中,可以理解为被消费了。

// MyButton组件
<div>
    <button></button>
</div>
<script>
    export default {
        props: ['name']
    }
</script>

// 使用MyButton组件
<div>
    <MyButton name="xxx"/>
<div>

// name被消费,不会透传到MyButton的根组件上

若不想子组件自动进行透传,可以通过选项配置inheritAttrs: false进行禁止,禁止后可以通过$attrs对传入的属性直接访问。

// MyButton组件
<div>
    <button>{{ $attrs.text }}</button>
</div>
<script>
    export default {
        props: ['name'],
        inheritAttrs: false
    }
</script>

// 使用MyButton组件
<div>
    <MyButton name="xxx" text="bbb"/>
<div>


若子组件有多个根节点,需要显示的将$attrs绑定到某一个元素,否则会警告。

// 根节点1
<header>---</header>

// 根节点2
<main v-bind="$attrs">---</main>

// 根节点3
<footer>---</footer>

// 如果v-bind没有指定具体属性名,会将对象中属性全部转换成该组件的属性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值