【问题标题】:How to pass props from parent to grandchild in vue如何在vue中将道具从父母传递给孙子
【发布时间】:2019-03-04 15:09:57
【问题描述】:

我宁愿将任意数量和类型的道具从父级传递给孙级,而不是硬编码道具。

我试过这个:

<FileListRenderless v-bind="$props" v-on="$listeners">
<!-- <FileListRenderless :attachments="attachments" :isEditMode="isEditMode" :type="type"> -->

效果很好,但我仍然必须在子组件的 props 对象中定义它们。如何也抽象分配给子组件的 props 对象?

【问题讨论】:

    标签: vue.js vuejs2 vue-component


    【解决方案1】:

    如果您不想在子组件中明确定义道具,那么您应该将道具作为对象传递,例如:

    <FileListRenderless :my-props="$props" v-on="$listeners">
    

    这绕过了内置的道具验证。您可以对侦听器执行相同的操作,只需手动将它们附加到组件安装上。但是,如果您需要这样做,我建议您重新考虑您的设计。如果你有大量可能的 props,那么你可能想找到一种方法来抽象出某些逻辑、制作工厂组件、使用指令或使用 mixin。 Vue 工具包中有很多工具。

    【讨论】:

    • 我听到了,也许我需要重新考虑一些事情,但您的解决方案主要是我正在寻找的。唯一的事情是我必须解构 myProps 对象以获取从父级发送的确切道具,可以在道具定义中完成吗?
    • 如果我理解你的问题,没有。它就像编译时与运行时的区别。子组件中的 props 定义在编译时被解释,但它只会在运行时知道正在传递的对象。
    【解决方案2】:

    如果没有更多上下文,我建议使用v-bind="$props" 传递所有道具。正如你所做的那样。

    您也可以使用bus 或 vuex,但这些会创建全局级别的变量,这并不总是理想的。

    【讨论】: