vue 新增 $attrs 与 $listeners 解释

2019年10月 20

一、$attrs $inheriAttrs
$attrs --可以继承所有的父级组件的属性(除props、class、style)
$inheritAttrs : 默认状态为true, 继承所有父级组件的属性(除props所绑定的)添加到子组件的根元素上, 状态为false,则不会继承父级组件的属性(class属性仍然会渲染)

$listeners–属性,它是一个对象,里面包含了作用在这个组件上的所有函数事件监听器,你就可以配合 v-on=“listeners” 将所有的事件监听器指向这个组件的某个特定的子元素

用途:父组件传递数据给子组件或者孙组件

 <div id="app">
        <my-component placeholder="Enter your username" datalist="何冲很帅" :content="content"  :title="title">{{content}}</my-component>
    </div>
    Vue.component("my-component", {
            inheritAttrs: false, //此处设置禁用继承特性
            props: ['title','content'],
            created () {
                console.log(this.$attrs)
            },
            template: `  <div>  
                            <div> {{$attrs.placeholder}}</div>
                            <div>{{$attrs.datalist}} </div>
                             <input v-bind="$attrs" />
                        </div> `,
        })
        const vm = new Vue({
            el: '#app',
            data: {
                content: '我是何冲',
                title: '我是标题'
            },
        })

HTML渲染之后html

 <div placeholder="Enter your username" datalist="一个字 很帅">
        <div> Enter your username</div> 
        <div>何冲很帅 </div> 
        <input placeholder="Enter your username" datalist="何冲很帅">
    </div>

设置inheritAttrs: true html渲染如图

 <div placeholder="Enter your username" datalist="一个字 很帅">
        <div> Enter your username</div> 
        <div>你很帅哈 很帅 </div> 
        <input placeholder="Enter your username" datalist="何冲很帅">
    </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值