0

在我的 Angular 6 应用程序中,我有应该修改组件属性的方法。我的确切意思是:

...
value: number = 10;
changeValue(v) { return v = 100; }
...

我使用组件的属性调用此方法:

this.changeValue(this.value); // didn't modify this.value 

我希望它this.value等于 100,但它仍然等于 10。同时,我知道我可以读取函数内部的v参数值(this.value在我的情况下),但我不能修改它。

我做错了什么以及如何实现所需的行为?你能告诉我解决这个问题的正确方向吗?我将不胜感激任何帮助。

4

1 回答 1

0

在 Typescript 中,原语(字符串、数字、布尔值等)是按值传递的。所以,你可以(至少)做两件事

您可以将方法的返回值分配给value变量

changeValue(){
   return 100;
}

this.value = this.changeValue();

或者你可以这样做:

changeValue(){
   this.value = 100;
}

this.changeValue();

更新

正如Jeto在评论中提到的那样,即使您传递了一个对象而不是原语,结果也不会改变,因为您分配给对象本身而不是对象的属性。

value = {foo: 'bar'}

changeValue(v){
    return v = {foo: 'baz'};
}

console.log(this.value); // {foo: 'bar'}
this.changeValue(this.value);
console.log(this.value); // {foo: 'bar'}  #Unchanged

但是如果你想改变它的属性而不是对象本身,它会起作用

value = {foo: 'bar'}

changeValue(v){
    v.foo = 'baz'
}

console.log(this.value); // {foo: 'bar'}
this.changeValue(this.value);
console.log(this.value); // {foo: 'baz'}  #Changed
于 2018-12-22T20:47:55.160 回答