在打字稿中创建常用功能

时间:2018-03-11 16:02:58

标签: angular typescript

我有两个清单

men=['x','y','z']
women=['a','b','c'];

和两个vabriable以html显示

selectedMan;
selectedWoman;

我想创建一个通用的选择方法

select(index,source,destination){
  destination=source[index];
}

函数调用

this.select(2,this.men,this.selectedMan);
this.select(1,this.women,this.selectedWoman)

HTML

<p>Welcome to team {{selectedMan}}</p>
<p>Welcome to team {{selectedWoman}}</p>

但是在html中只显示对团队的欢迎

2 个答案:

答案 0 :(得分:2)

参数按值传递,而不是通过引用传递。您的所有功能都是更改局部变量destination的值。所以它实际上什么也没做。

坦率地说,我没有看到这一点。即使它奏效了,

this.select(1,this.women,this.selectedWoman) 

更长,更不清晰
this.selectedWoman = this.women[1];

如果你真的想要这样的功能,你需要,例如

select(index: number, array: Array<string>, callback: (s: string) => void) {
  callback(array[index]);
}

并以这种方式使用它:

this.select(1, this.men, s => this.selectedMan = s); 

或(但这不太安全,并且不允许缩小):

select(index: number, array: Array<string>, property: string) {
  this[property] = array[index]);
}

并将其称为:

this.select(1, this.men, 'selectedMan');

答案 1 :(得分:2)

如果要创建一个通用函数,请以正确的方式执行。了解pass by value和pass by reference之间的区别。 What's the difference between passing by reference vs. passing by value?

<强>解决方案

方法定义

select(index,source){
 return source[index];
}

方法调用

 this.selectedMan=this.select(2,this.men)
 this.selectedWoman=this.select(1,this.women);