【问题标题】:Angular 4 with TypeScript: passing parameters by reference带有 TypeScript 的 Angular 4:通过引用传递参数
【发布时间】: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 用于模板的其他部分,如果这是您想要实现的。

标签: angular typescript pass-by-reference pass-by-value


【解决方案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
    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 2011-08-21
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多