2016-09-19 61 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:玩得開心,保持快樂!