vue中如何覆盖组件的props?

发布于 2022-09-12 04:29:31 字数 1020 浏览 16 评论 0

template

<Input size="small" v-bind="prop"></Input>

script中:

export default {
    data() {
        return {
            prop: {
                size: 'large'
            }
        };
    }
};

如题: template中定义了sizesmall, 想用一个属性覆盖它, 于是乎使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仙气飘飘 2022-09-19 04:29:31

这个问题已经在vue3.0解决了:
https://www.vue3js.cn/docs/zh/guide/migration/v-bind.html#_2-x-语法
现在会默认根据顺序去定义组件的属性, 而不是v-bind外的属性定义为优先了

山色无中 2022-09-19 04:29:31

按我的理解,需要覆盖属性,本质就是你这属性需要改变,那为啥不用下面这种去修改,dom和实际逻辑区分开,更好理解与处理

<input :size="size" ></input>
<button @click="changeSize">修改尺寸</button>

export default {
    data() {
        return {
            size: 'small'
        };
    },
    methods:{
        changeSize(){
            this.size = 'large';
        }
    }
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文