Невозможно установить значение класса внутри компонента - PullRequest
0 голосов
/ 06 мая 2019

Я хочу установить свойства класса вручную, но в настоящее время я не могу этого сделать.

Когда загружается моя страница, расписание типа any устанавливается в ngOnInit.Затем одним нажатием кнопки я хочу метод, который должен вручную устанавливать значение свойства вызываемого класса.К сожалению, установка значения возвращает ошибку

ОШИБКА TypeError: Невозможно установить свойство 'operatorId' из неопределенного

Вот как это происходит в моем коде

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

import { ScheduleService } from './../schedules/schedule.service';
import { Ticket } from './../ticket/ticket';

@Component({
  selector: 'app-booking',
  templateUrl: './booking.page.html',
  styleUrls: ['./booking.page.scss']
})
export class BookingPage implements OnInit {
  schedule: any;
  ticket: Ticket;

  constructor() { }

  ngOnInit() {
    // set the schedule ID
    this.route.queryParams.subscribe(params => {
      this.scheduleId = params['schedule'];
    });

    this.selectedSchedule(this.scheduleId);
  }

  // get schedule selected
  selectedSchedule(scheduleId: string) {
    this.scheduleService.getSchedule(scheduleId).then(data => {
      this.schedule = data;
    });
  }

  // buy ticket
  buyTicket(ticket: Ticket) {
    console.log(this.schedule.operatorId); // operator ID is logged
    ticket.operatorId = this.schedule.operatorId;
    console.log(ticket.operatorId); // ERROR TypeError: Cannot set property 'operatorId' of undefined
  }
}

Как ни странно, я могу видеть значение в консоли, когда регистрирую operatorId перед установкой значения operatorId тикета.Но он становится неопределенным после установки.Почему это так и как лучше всего вручную установить значение свойства класса?

1 Ответ

0 голосов
/ 06 мая 2019
     // buy ticket
      buyTicket(ticket: Ticket) {
        console.log(ticket) // first identify it is defined or not ? if it is undefined then intialize it like below based on the type of operatorId 
        ticket = {operatorId : ''} // considered operatorId as string
        console.log(this.schedule.operatorId); // operator ID is logged
        ticket.operatorId = this.schedule.operatorId;
        console.log(ticket.operatorId);
      }

Если у класса Ticket много свойств, типы расписаний и билетов совпадают с типами в классе BookingPage, тогда вы можете легко сделать это следующим образом:

ticket = this.schedule console.log (ticket.operatiorId) // вы получите ответ

Рекомендация: для ввода => Использовать интерфейс вместо класса. (т.е. ticket: Ticket)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...