对vue中‘禁用 Attribute 继承’和‘$attrs’小知识的理解

之前对Prop中的“禁用Attribute继承”这部分的知识一直不理解,所以自己亲自试一下小demo

 <div id="container">
            <base-input v-model="username" required placeholder="Enter your username"></base-input>
    </div>
    
    <script>
        Vue.component('base-input', {
            inheritAttrs: false,
            props: ['label', 'value'],
            template: `
    <label>
      {{ label }}
      <input
        v-bind="$attrs"
        v-bind:value="value"
        v-on:input="$emit('input', $event.target.value)"
      >
    </label>
  `
        })
        var vm=new Vue({
            el:'#container',
            data() {
                return {
                    msg:'xinnianhao'
                }
            },
        })
    </script>

发现解析出来的代码如下:

<div id="container"><label>
      <input required="required" placeholder="Enter your username"></label>
</div>

如果去掉inheritAttrs: false,这个设置,结果如下:

<div id="container">
      <label required="required" placeholder="Enter your username">
      <input required="required" placeholder="Enter your username"></label>
</div>
inheritAttrs: false

说明inheritAttrs: false,这个设置决定label标签是否继承来自父组件的属性(默认继承)

vm.$attrs
  • 类型:{ [key: string]: string }
    包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

内部组件获取标签中除class和style之外的标签上的属性

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、vm.$attrs简介 首先我们来看下vue官方对vm.$attrs的介绍:包含了父作用域中不作为 prop ...
    _littleTank_阅读 38,841评论 50 119
  • 组件注册 组件名 在注册一个组件的时候,我们始终需要给它一个名字。 该组件名就是Vue.component的第一个...
    oWSQo阅读 3,047评论 0 1
  • 前言 开发一个React应用,更多的是在编写组件,而React组件最小的单位就是React元素,编写组件的最大的好...
    itclanCoder阅读 4,922评论 0 1
  • 背景   Vue是单页面应用,单页面应用又是由组件构成,各个组件之间又互相关联,那么如何实现组件之间通信就显得尤为...
    A郑家庆阅读 4,490评论 0 1
  • 特别忙的时候就会忘了思念,夜深人静时候发现今天忘了想他,几天不见还好吗? 偶尔能体会太忙碌的损失,此时此刻最该睡觉...
    炫彩时空阅读 503评论 0 0