[Vue] $attrs的使用场景
正常情况下,Vue推荐用props向子组件参数。但是在特定场景下,使用$attrs
会更方便。
考虑最简单的场景,一个滑动输入框组件定义如下:
<template> <input class="slider__input" type="range" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" /></template><script>export default { name: "Slider", props: { modelValue: [Number, String] }};</script>
正常调用它的方式为:
<Slider v-model="value" />
但实际上,我们可以为其额外添加少量属性
<Slider v-model="value" min="0" max="50" class="blue_slider" id="special_id" data-cy="cypress-slider" @keydown="() => true" aria-label="Example slider"/>
这些属性没有在子组件的props
中,会以原生方式出现在input
标签中:
属性绑定成功,注意在Vue 3.x里,class也能正常传递
因为这里根元素只有一个<input>
,不需要$attrs
登场,就能完成属性的传递。
假如input
不是根元素呢?
例如父组件不变,子组件换成这样定义:
<template> <h1>{{ title }}</h1> <input type="range" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" class="slider__input" /> <div>Value: {{ value }}</div></template>
渲染出来的dom如下:
不是根节点,属性无法绑定
可以看出,我们额外添加的属性并没有传递给input
.
好了,轮到$attrs
登场了
只要给input
添加一个指令 v-bind="$attrs"
<template> <h1>{{ title }}</h1> <input type="range" **v-bind="$attrs"** :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" class="slider__input" /> <div>Value: {{ value }}</div></template>
利用`v-bind=”$attrs”` 实现属性绑定
可以看出,额外添加的属性,又成功的传递给了input
标签。
总结
Vue 3.x中所有的属性,包括class/style都可以通过
$attrs
传递,这个与Vue2.x不同.v-bind="$attrs"
指令,能够指定dom节点,完成属性绑定。$attrs
只适合传递原生属性/事件,其它的属性还是老老实实用props
和events
传递吧。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » [Vue] $attrs的使用场景
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » [Vue] $attrs的使用场景