vue中如何覆盖组件的props?
template
中
<Input size="small" v-bind="prop"></Input>
script
中:
export default {
data() {
return {
prop: {
size: 'large'
}
};
}
};
如题: template
中定义了size
为small
, 想用一个属性覆盖它, 于是乎使用v-bind="{size: 'large'}"
的办法, 但是发现不生效, 无法覆盖, 有看过v-bind
源码的小伙伴说一下为什么吗?
同时, 有什么办法可以覆盖属性吗?
补充一下, vue3 已经支持根据书写顺序决定 props 的优先级了, 因此可以做到 v-bind 覆盖原有属性! 而在 vue2 中, 可以用以下的方法作为简单的替代:
<template>
<input v-bind="prop" />
</template>
<script>
export default {
props: {
bindProps: Object,
},
computed() {
return {
size: 'small'
...this.bindProps,
};
}
}
</script>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个问题已经在vue3.0解决了:
https://www.vue3js.cn/docs/zh/guide/migration/v-bind.html#_2-x-语法
现在会默认根据顺序去定义组件的属性, 而不是
v-bind
外的属性定义为优先了按我的理解,需要覆盖属性,本质就是你这属性需要改变,那为啥不用下面这种去修改,dom和实际逻辑区分开,更好理解与处理