2016-11-24 56 views
4

我有一个名为“田”一个荣耀的输入组件,其中我已经宣布了一些道具,从而:数组作为Vue.js组件的道具?

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

鉴于这是有效的输入看中的包装,还有其他不少例如,我可能也想传入属性,例如“占位符”。我真的不想在道具中声明所有这些(尽管这个列表足够有限,当然它可以做到这一点)。我想要做的是传递一个数组,可能被称为'attrs',它可能包含任意一组属性。现在我知道可以做到这一点,但我的问题是,我将如何从父级创建此?我可以用类似下面的方法来做到这一点吗(虽然显然需要绑定)?

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

回答

3

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

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

并结合此作为道具:

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

为了澄清 - 它能够设定对象/阵列等直接在模板,vue的模板解析器将设置相关道具上的值,即

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

然而,这不是一种最佳实践,因为您的模板很快就会变得混乱,并且可能会更难确定数据的设置位置。相反,建议您将此数据抽象为组件上的param并将该param绑定到prop - 如上所述。

+0

是的,你是对的,在表格中显示它是一个对象。但它可能是一组属性对象,每个都有一个名称和值。但问题是,是否可以在使用它的HTML中定义它,而不是从JS中定义它。在父编辑表单组件中将使用该组件的多个实例,每个实例都有其自己的一组属性。 –

+0

更新回答确认你可以在模板上做到这一点 - 只是不推荐 – GuyC

+0

出于好奇,为什么不推荐?如果我想在表单上使用多个Field实例,我的选择是什么? –