【问题标题】:Array as prop for Vue.js component?数组作为 Vue.js 组件的道具?
【发布时间】:2017-04-09 03:33:45
【问题描述】:

我有一个名为“字段”的美化输入组件,我在其中声明了许多道具,因此:

 props: ['value','cols','label','group','name']

鉴于这实际上是一个花哨的输入包装器,我可能还想传入很多其他属性,例如“占位符”。我真的不想在 props 中声明所有这些(当然,列表足够有限,可以这样做)。我更喜欢做的是传递一个数组,可能称为“attrs”,它可以包含任意一组属性。现在我知道可以做到这一点,但我的问题是如何从父级中创建它?我可以使用以下内容(尽管显然需要绑定)吗?

 <field :attrs="['placeholder':'Whatever','length':42]"></field>

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    这是一个对象而不是数组,是的,可以将对象作为道具传递。只需在父组件数据对象中设置值,即

    data() {
      return {
        attributes: { 
          placeholder: 'Whatever',
          length: 42,
        },
        ...
      }
    }
    

    并将其绑定为您的道具:

    <field :attrs="attributes"></field>
    

    澄清一下 - 可以直接在模板中设置对象/数组等,然后 vue 的模板解析器将设置相关道具的值,即

    <field :attrs="[{ name: 'foo' }, { name: 'bar' }]"></field>
    

    但这不是最佳做法,因为您的模板很快就会变得混乱,而且很难确定数据的设置位置。相反,建议您将此数据抽象为组件上的参数并将该参数绑定到 prop - 如上所述。

    【讨论】:

    • 是的,你是对的,在显示的形式中它是一个对象。但它可以是一组属性对象,每个对象都有一个名称和值。但是,问题是是否可以从使用它的 HTML 中定义它,而不是从 JS 中定义它。在父编辑表单组件中将使用该组件的多个实例,每个实例都有自己的一组属性。
    • 更新答案以确认您可以在模板上执行此操作 - 只是不推荐
    • 出于好奇,为什么不推荐呢?如果我想在表单上使用多个 Field 实例,我的替代方案是什么?
    • 上面列出了不推荐它的主要原因 - 我要补充一点,它使您传递给这些道具的数据更容易在父级上设置和更新。总的来说,这只是一种更清洁的工作方式。要将数据应用于多个字段组件,您只需为每个字段创建不同的参数,即attributesFoo: [{ ... }], attributesBar: [{ ... }],然后将所需的参数 (atttibutesFoo) 绑定到相关字段组件的 prop 上
    • 这对您有帮助吗?
    猜你喜欢
    • 2021-02-17
    • 2019-03-25
    • 2020-12-02
    • 2017-07-08
    • 2020-03-31
    • 1970-01-01
    • 2019-03-27
    • 2017-09-02
    • 2020-01-28
    相关资源
    最近更新 更多