带有字符串数组参数的Angular 5 / Typescript类构造函数

时间:2019-06-07 18:28:53

标签: angular typescript

当尝试通过传入字符串数组来构造类时,新的对象字符串数组为空。

我尝试了几种不同的方法来初始化构造函数中的新对象字符串数组,包括但不限于以下内容:

this.newArray = oldarray.slice();

this.newArray = Array.from(oldarray);

this.newArray = oldarray.map( s => { return s; });

遍历旧数组并将元素一次推入新数组。

这里有趣的是,在创建for循环时,我注意到字符串数组的行为就像它具有一个称为“ array”的属性一样。因此,因为oldarray.length = 0而不是oldarray.array.length = 5

,for循环不会处理

我可以在调试器中看到它。如果我尝试更改代码以引用oldarray.array,它会强调并抱怨.array部分,并且无法在ng serve下编译。

我知道这可能最终会变得简单/愚蠢,这只是我盯着同一代码几个小时的问题。

export class Widget {
  public role: string;
  public array: WidgetTuple[];

  constructor(role: string, tuplearray?: WidgetTuple[]) {
    this.role = role;
    this.array = [];
    if (tuplearray != undefined) {
      for (var lcv = 0; lcv < tuplearray.length; lcv++) {
        var tupl = new WidgetTuple(tuplearray[lcv].widgetGrouper);
        this.array.push(tupl);        
      }
    }
  }
}

export class WidgetTuple {
  public widgetGrouper: string[];

  constructor(strvalues?: string[]) {
    this.widgetGrouper = [];
    if (strvalues != undefined) {
      this.widgetGrouper = strvalues.slice();
      //this.widgetGrouper = strvalues.map()
      //for (var lcv = 0; lcv < strvalues.length; lcv++) {
      //  var entry = strvalues[lcv].toString();
      //  this.widgetGrouper.push(entry);
      //}
    }
  }
}

我希望原始的widgetGrouper字符串数组中的字符串元素包含在添加到Widget数组中的新WidgetTuple对象中。

到目前为止,所有尝试都会在新创建的对象中产生空字符串数组结果。

预先感谢您的帮助。

这在我的评论中格式不正确,因此,是在VS中击中调试断点并查看strvalues:

-       strvalues   Array(0) [] Object
+       array   Array(4) ["widgetone", "widgettwo", "someitem", …]  Object
        length  0   number
+       __proto__   Array(0) [, …]  Object

1 个答案:

答案 0 :(得分:0)

弄清楚了。如果可以的话,我会删除这个问题,但是谁知道...这可能有一天会帮助其他人。

基本上,答案就在任何的危险之内。

在组件视图中,我为小部件对象输入了 any 类型的输入。然后,在视图中使用该对象时会错误地引用该对象(添加array属性)。