带有 TypeScript 的 Angular 4:通过引用传递参数

Angular 4 with TypeScript: passing parameters by reference

提问人:claudioz 提问时间:9/10/2017 更新时间:2/21/2023 访问量:7957

问:

我刚刚开始使用 TypeScript 语言使用 angular 4 开发一个 Web 应用程序。 我的问题是:如果我使用类中数据字段的值初始化字符串变量,则该值似乎是用于复制而不是引用的。

有没有办法传递参数以供参考?

例:

export class MyObject {
   string1: string;
   string2: string;
}

export class MyClass {
   myString: string;
   object: MyObject;
   array[]: MyObject[];

   constructor() {
      this.array = [{
       string1: this.myString;
       string2: this.myString;
      }];
   }

}

如果我尝试更改字段的值,然后在我的 HTML 模板中使用字符串插值this.myString

{{myString}}

{{array[0].string1}} {{array[0].string2}}

唯一更改的值是 ,而其他两个值与第一个值相同。这是因为参数的传递似乎是针对值而不是通过引用完成的。myStringmyString

对不起,如果这个问题是微不足道的,但我现在正在学习 TypeScript

Angular TypeScript 按引用传递

评论

0赞 jonrsharpe 9/10/2017
字符串在 JS/TS 中是不可变的。
0赞 brijmcq 9/10/2017
您提供的代码让我感到困惑。您似乎正在将 MyClass 与 @Component 一起使用
0赞 brijmcq 9/10/2017
如前所述@jonrsharpe,字符串是不可变的。如果您想将 的新值用于模板的其他部分,为什么不直接删除 并直接用于模板的其他部分,如果这是您想要实现的。this.myStringarraythis.myString

答:

0赞 Alex Kvitchastyi 9/10/2017 #1

您应该从数组中更改值,例如

<input [(ngModel)]="array[0].string1">

在数组中,myString 的新实例;

0赞 Titian Cernicova-Dragomir 9/10/2017 #2

这通常是变量在 Javascript(以及大多数其他现代编程语言,Java、C# 等)中的工作方式。按引用传递的一种常见方法是创建一个包含字符串的附加对象,并将引用分配给该对象的任何需要的位置。

例如:

export interface MyObject {
   string1: Ref;
   string2: Ref;
}
export interface Ref {
    value: string
}
export class MyClass {
   myString: Ref;
   array: MyObject[];

   constructor() {
      this.myString = { value: "old Vlaue"};
      this.array = [{
       string1: this.myString,
       string2: this.myString
      }];
      this.myString.value = "New Value"
   }
}

绑定时,请使用:

{{myString.value}}

{{array[0].string1.value}} {{array[0].string2.value}}

评论

0赞 claudioz 9/10/2017
如果我使用包装对象 String 作为原始类型字符串的替代品,一切都会正常工作吗?
0赞 Titian Cernicova-Dragomir 9/10/2017
如果您在需要字符串值的任何地方使用,我希望它应该。但你应该测试一下。prop.value
0赞 claudioz 9/10/2017
我不明白
0赞 Titian Cernicova-Dragomir 9/10/2017
例如,如果有,则 var 将不起作用。您需要使用 .一般来说,在你需要值的任何地方,你不仅需要使用var myObject = { string1: { value: 'x' }, string2: { value:'y' } }d = myObject.string1 + myObject.string2d = myObject.string1.value + myObject.string2.valueprop.valueprop