Доброе утро! Я работал с Ionic в течение нескольких недель, и я подумал, что на самом деле понимаю, как работает машинопись и угловатый текст, но у меня возникли странные проблемы, и я думаю, что это будет очень глупо ...

Я пытаюсь создать объект с именем 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";, но я все еще получаю ту же ошибку ...

Был бы рад получить некоторую помощь, поскольку я думаю, что это все о способе создания объекта (и я также думаю, что это будет очень глупо), но я так застрял здесь. Спасибо!

Изменить: Здесь я пытаюсь назначить данные для объекта. (Переменная данных является 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;
                  }
                });
            }
      });
    }
0
Juli15 21 Авг 2018 в 12:53

3 ответа

Лучший ответ

Поместите это в конструктор

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

Некоторое объяснение

Это вложенный объект, который вы не можете создать сразу же после его объявления.

Например, var xxx = 'hi'; в порядке. но если вы делаете var xxx.yyy = 'hi', это не хорошо, так как xxx не определен ранее, поэтому yyy из xxx вызовет ошибку.

Ты можешь сделать

var xxx = {
   yyy: 'hi'
};

Или ты можешь сделать

var xxx = {};
xxx.yyy = 'hi';
1
cjmling 21 Авг 2018 в 16:21

В Typescript делаю:

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

Установит только pendingWaybills тип переменной. Чтобы объявить и присвоить значение переменной, вы должны сделать что-то вроде:

pendingWaybills = { // note the "="
    waybills: something,
    clients: something,
    clientWaybills: something,
};
2
Augustin R 21 Авг 2018 в 12:08

Вам нужно создать пустой экземпляр объекта, объявив, что свойства не создают переменную, а только сообщают вашему ide, какие свойства у него есть:

public pendingWaybills = {
    waybills: []
    clients: [],
    clientWaybills: [],
};
2
Sjoerd de Wit 21 Авг 2018 в 11:02
51946058