(二)Vue特性继承:inheritAttrs和$attrs

一.Vue特性自动继承

直接看一个例子:

<body>
    <div id="app">
        <custom-component customProp="propValue" newAddProp="propValue2"></custom-component>
    </div>
    <script type="text/javascript">
    Vue.component('custom-component', {
    	props:['customProp'],
    	template:`<div id="1"><span id="2"><span id="3">vue.js</span></span></div>`,
    });

    var app1 = new Vue({
    	el:'#app'
    });
    </script>
</body>

在浏览器中打开,并打开开发者工具,观察HTML元素节点:
在这里插入图片描述
可以看到,我们组件的template根节点元素div(id=1) 会自动继承我们添加的属性,这就是Vue组件的特性自动继承。

二.inheritAttrs禁止特性自动继承

inheritAttrs的作用就是禁止特性继承,对上面的例子加已改造,在component中添加 inheritAttrs: false

    Vue.component('custom-component', {
    	inheritAttrs: false, //此处设置禁用继承特性
    	props:['customProp'],
    	template:`<div id="1"><span id="2"><span id="3">vue.js</span></span></div>`,
    });

保存,重新打开浏览器,观察HTML元素节点:
在这里插入图片描述
可以看到,template的根元素并没有继承我们添加的prop。
所以inheritAttrs的作用就是控制组件的根元素是否继承特性。

三.$attrs指定某个元素继承特性

继续对上面的例子进行改造,在组件template对id=2的元素添加v-bind="$attrs"

    Vue.component('custom-component', {
    	inheritAttrs: false, //此处设置禁用继承特性
    	props:['customProp'],
    	template:`<div id="1"><span id="2" v-bind="$attrs"><span id="3">vue.js</span></span></div>`,
    });

保存,查看HTML渲染结果:
在这里插入图片描述
我们可以看到,id=2的元素,继承了我们传入的prop。
所以可以知道$attrs的作用是指定某个元素继承属性。

有了 inheritAttrs: false 和 $attrs,你就可以手动决定这些特性会被赋予哪个元素。

以上就是我对Vue特性继承的一些理解,如有不对,欢迎在下方指出。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 中,当你使用某些组件时,组件可能会使用 `$attrs` 属性来传递一些额外的属性到组件内部。 在 `$attrs` 中,存储了组件外部传入的、但是组件内部没有声明的所有属性。这些属性可以通过 `$attrs` 访问并使用。 在 `$attrs` 中,还有一个特殊的属性 `$listeners`,用于存储组件外部传入的、但是组件内部没有声明的事件监听器。这些事件监听器可以通过 `$listeners` 访问并使用。 当你在使用 `el-table` 组件时,`$attrs` 属性可以用于传递一些额外的表格属性到组件内部。例如,你可以通过 `$attrs` 给表格添加 `border`、`size`、`stripe` 等属性,如下所示: ```html <el-table :data="tableData" :attrs="{ border: true, size: 'medium', stripe: true }" > <!-- 表格列定义 --> </el-table> ``` 在上面的代码中,我们通过 `:attrs` 给表格添加了 `border`、`size`、`stripe` 等属性。这些属性会被传递到 `el-table` 组件内部,并应用到表格上。在 `el-table` 组件内部,你可以通过 `$attrs` 访问这些属性,如下所示: ```js export default { name: 'MyTable', props: { // ... }, render(h) { return h( 'el-table', { attrs: this.$attrs, // 将外部传入的属性应用到表格上 on: this.$listeners // 将外部传入的事件监听器绑定到表格上 }, this.$slots.default // 表格列定义 ) } } ``` 在上面的代码中,我们将 `$attrs` 属性应用到了 `el-table` 组件上。这样,所有在外部传入的、但是组件内部没有声明的属性都会被应用到表格上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值