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

Posted

技术标签:

【中文标题】带有 TypeScript 的 Angular 4:通过引用传递参数【英文标题】:Angular 4 with TypeScript: passing parameters by reference 【发布时间】:2018-02-18 17:15:09 【问题描述】:

我刚刚开始使用 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;
      ];
   


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

myString

array[0].string1 array[0].string2

唯一改变的值是myString,而其他两个值保持不变myString的第一个值。这是因为参数的传递似乎是为了价值而不是参考。

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

【问题讨论】:

字符串在 JS/TS 中是不可变的。 你提供的代码让我很困惑。似乎您正在使用带有 @Component 的 MyClass 正如@jonrsharpe 提到的,字符串是不可变的。如果您想将this.myString 的新值用于模板的其他部分,为什么不直接删除array 并直接将this.myString 用于模板的其他部分,如果这是您想要实现的。 【参考方案1】:

你应该改变数组中的值

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

在你的数组中 myString 的新实例;

【讨论】:

【参考方案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

【讨论】:

如果我使用包装对象 String 作为原始类型字符串的替代品,一切都会正常工作? 如果您在需要字符串值的任何地方使用prop.value,我希望它应该这样做。但是你应该测试看看。 我不明白 如果你有var myObject = string1: value: 'x' , string2: value:'y' ,那么 var d = myObject.string1 + myObject.string2 将不起作用。您需要使用d = myObject.string1.value + myObject.string2.value。通常,在您需要该值的任何地方,您都需要使用prop.value 而不仅仅是prop

以上是关于带有 TypeScript 的 Angular 4:通过引用传递参数的主要内容,如果未能解决你的问题,请参考以下文章

带有 TypeScript 的 Angular 2 [关闭]

带有 Ionic 2 Angular 2 和 TypeScript 的 OpenPGP

导入的类不能在带有 TypeScript 的 Angular.js 中用作服务

带有普通 TypeScript 的 Angular 6 - 错误:模块没有导出的成员

Typescript 编译器错误预期带有 Angular 1.5 组件的分号

带有 TypeScript 错误的 Angular HTTP GET http.get(...).map 不是 [null] 中的函数