【发布时间】:2019-06-03 14:34:56
【问题描述】:
正如标题所暗示的,我正在寻找一种方法来将具有多个属性的对象绑定到组件@Inputs,而不必显式编写所有属性
假设我有这个对象
let params = {
delta: 0.2,
theta: 2.3,
sigma: 'foo',
}
不必像这样单独绑定所有这些
<my-component
[delta]="params.delta"
[theta]="params.theta"
[sigma]="params.sigma"/>
我想一次性绑定所有这些。
<my-component [someDirectiveIDontKnow]="params"/>
我该怎么做?
找到了一个指向先前询问的question 的链接,但无法使其正常工作。
编辑: 我不是在问如何绑定@Inputs。想象一下,我正在渲染的组件有 40 个 @Inputs,并且我不允许重写它以只接受一个 @Input 可以包含所有参数。
所以编写一个使用这个组件的模板变得非常丑陋和庞大。
....
<my-component
[param1]="params.param1"
[param2]="params.param2"
[param3]="params.param3"
[param4]="params.param4"
[param5]="params.param5"
[param6]="params.param6"
[param7]="params.param7"
[param8]="params.param8"
[param9]="params.param9"
[param10]="params.param10"
[param11]="params.param11"
[param12]="params.param12"
[param13]="params.param13"
[param14]="params.param14"
... and so on ....
/>
....
【问题讨论】:
-
您的组件
<my-component>应该在其component.ts 中有@Input params。然后你用括号绑定<my-component [params]="myParamObject">。 -
我不知道这是否可能,但我当然不喜欢它。我怀疑这是不可能的,因为 Angular 会验证输入属性 - 即,如果您为没有
thing输入属性的组件添加[thing]="true",Angular 会引发错误。 -
@Vlad274 它只是将一个对象作为输入传递。当然有可能。至于OP,RTFM !
-
对于那些没有抓住重点的人:问题不是“我可以传递一个对象吗?”问题是“我可以让一个对象扩展/展平它的属性吗?”
标签: javascript angular vuejs2