2016-09-19 63 views
0

使用蔓延运营商因此,我会做这样的事情经常如何在角2输入

save(...keys: string[]) { 
    keys.foreach(x => // save); 
} 

我可以调用任何这是因为传播运营商的这些方式。

save('string1', 'string2'); 
save(['string1', 'string2']); 
save('string'); 

我喜欢这种行为,但我有,我有我想要的行为方式相同的组件上的@input的情况下什么。有时我想给它一个项目,其他时间我想给它一个数组。这个语法如何应用? 我希望能够做到这一点。

@Input() ...myClass: ClassBase[] = []; 

和这样的用法。

// ts 
currentClass = new ClassBase(); 
conflictingClasses = [new ClassBase(), new ClassBase()]; 

// html 
<my-component [myClass]="currentClass"></my-component> 
<my-component [myClass]="conflictingClasses"></my-component> 

我该如何得到这种行为?我们已经在几个地方使用了这个组件,但我们只给它一个项目,我想不必大规模重构来改变这个组件来获取一组项目。

谢谢!

回答

1

由于扩展运算符的原因,我可以将这些方法中的任何一种调用。

不,您的问题的前提是错误的。您必须用n个字符串参数调用它。字符串数组string[]不是一回事。这是如下图所示:

function save(...keys: string[]) { 
    keys.forEach(x => /** save */); 
} 


save('string1', 'string2'); // OKAY 
save('string'); // OKAY 
save(['string1', 'string2']); // ERROR ! 

请为一个不同的问题,而不是编辑这个,因为它可能不会修改后得到太多的关注。 PS:玩得开心,保持快乐!