【问题标题】:Angular 5 / typescript class constructor with string array argument带有字符串数组参数的Angular 5 / typescript类构造函数
【发布时间】:2019-06-07 18:28:53
【问题描述】:

当试图通过传入一个字符串数组来构造一个类时,新的对象字符串数组是空的。

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

this.newArray = oldarray.slice();

this.newArray = Array.from(oldarray);

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

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

这里有趣的是,在创建 for 循环时,我注意到字符串数组的行为就像它有一个名为“数组”的属性。所以for循环不会处理,因为oldarray.length = 0,但是oldarray.array.length = 5

我可以在调试器中看到这一点。如果我尝试将代码更改为引用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

【问题讨论】:

  • the string array acts like it has a property called "array" - 你是指浏览器控制台吗?他们通常只是说“数组”或“对象”只是为了弄清楚它是什么。
  • 对不起,更具体地说,我的参考是从 Visual Studio 中的断点调试。击中断点,strvaluse 看起来像这样: - strvalues Array(0) [] Object + array Array(4) ["widgetone", "widgettwo", "someitem", ...] Object length 0 number + proto Array(0) [, ...] 对象
  • 我不知道您遇到的具体问题是什么。您的问题是什么?
  • 问题是,为什么新对象没有正确实例化? strvalues 有 4 个条目,但推入小部件数组的 tupl 对象在其 WidgetTuple 对象中没有字符串。
  • 你是如何实例化对象的?我怀疑您将 WidgetTuple[] 以外的其他内容传递给您的构造函数。

标签: angular typescript


【解决方案1】:

想通了。如果可以的话,我会删除这个问题,但谁知道呢……这可能有一天会帮助其他人。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2016-08-14
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多