【问题标题】:Create objects on Ionic在 Ionic 上创建对象
【发布时间】:2019-01-27 11:41:44
【问题描述】:

早上好! 我已经使用 Ionic 几个星期了,我认为我实际上了解 typescript 和 angular 的工作原理,但我发现自己遇到了一个奇怪的问题,我认为这会很愚蠢......

我正在尝试创建一个名为pendingWaybills 的对象,其中包含一些名为waybills、clients 和clientWaybills 的属性。问题是我正在以这种方式创建它:

  pendingWaybills: {
    waybills: any
    clients: any,
    clientWaybills: any,
  };

我也试过

  pendingWaybills: {
    "waybills": any,
    "clients": any,
    "clientWaybills": any,
  };

还有其他一些方法,但是当我尝试为该属性分配值时,我收到以下错误:TypeError: Cannot set property 'waybills' of undefined

我还尝试分配一些字符串或整数,以查看它是否与我尝试分配的数据有关,例如this.pendingWaybills.waybills = "Hi";,但我仍然遇到相同的错误...

很高兴获得一些帮助,因为我认为这完全是关于创建对象的方式(而且我也认为这会很愚蠢),但我被困在这里了。 谢谢!

编辑: 这是我尝试将数据分配给对象的地方。 (变量data是一个json)

  loadPendingWaybills(){
    this.loadClients(2)
      .then(data => {
        this.pendingWaybills.waybills = data;
        var preClients = this.pendingWaybills.waybills;
          this.clients = [];
            for(let i = 0;i < preClients.length; i++){
                if(this.pendingWaybills.clients.indexOf(preClients[i].descr1_sped) == -1){
                  this.pendingWaybills.clients.push(preClients[i].descr1_sped)
                }
            }
          this.pendingWaybills.clientWaybills = [];
            for(let i = 0; i < this.pendingWaybills.clients.length; i++){
              this.getWaybills(this.pendingWaybills.clients[i], 2)
                .then(data => {
                  if(this.pendingWaybills.clientWaybills[i] != data){
                    this.pendingWaybills.clientWaybills[i] = data;
                  }
                });
            }
      });
    }

【问题讨论】:

  • 你能把完整的代码放在你实例化和重新分配的地方吗?
  • 完成!我没有实例化该对象,因为理论上它是在变量声明中创建的,并且足以为其分配值,对吗? (或者这就是我的想法)
  • 它是嵌套对象,声明时不能立即创建。示例var xxx = 'hi'; 很好。但是如果你这样做var xxx.yyy = 'hi'就不好了,因为xxx之前没有定义所以xxx的yyy会导致错误。

标签: angularjs typescript object ionic-framework instantiation


【解决方案1】:

把这个放在构造函数中

constructor() {
   this.pendingWaybills = {
     waybills: [],
     clients: [],
     clientWaybills: [],
  };
}

一些解释

它是嵌套对象,您在声明它时不能立即创建它。

例如var xxx = 'hi'; 很好。但是如果你这样做var xxx.yyy = 'hi'就不好了,因为xxx之前没有定义所以xxx的yyy会导致错误。

你可以的

var xxx = {
   yyy: 'hi'
};

或者你可以这样做

var xxx = {};
xxx.yyy = 'hi';

【讨论】:

  • 也许多做一点解释会更好,但首先,它让我明白我做错了什么。谢谢!
  • @Juli15 实际上在上面的原始问题中发表了评论。我再放这里。
【解决方案2】:

在 Typescript 中,做:

pendingWaybills: {
    waybills: any;
    clients: any;
    clientWaybills: any;
};

只会设置pendingWaybills 变量类型。要声明变量并为其赋值,您必须执行以下操作:

pendingWaybills = { // note the "="
    waybills: something,
    clients: something,
    clientWaybills: something,
};

【讨论】:

  • 但是如果我还不能赋值呢?因为在我没有要分配的运单之前,我无法分配任何信息……
  • 您可以将其字段初始化为空数组,如其他答案中所述。
【解决方案3】:

你需要创建一个对象的空实例,声明属性不会创建变量,它只会告诉你的ide它有哪些属性:

public pendingWaybills = {
    waybills: []
    clients: [],
    clientWaybills: [],
};

【讨论】:

  • 但是我应该在哪里写这个?在我初始化变量的同一个地方?在构造函数内部?作为一个函数? (谢谢你的回答)
猜你喜欢
  • 2018-05-04
  • 2018-05-11
  • 2016-10-23
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多