Angular экземпляр класса предоставляет экземпляр объекта в производственной сборке - PullRequest
0 голосов
/ 13 июля 2020

Я использую Angular 8

В приложении у меня есть массив объектов для соответствующей визуализации данных в HTML

public components = [
  {
    type: "button",
    data: {
      label: "Click here"
    }
  },
  {
    type: "description_box",
    data: {
      content: "Enter description"
    }
  }
]

Теперь есть две кнопки Добавить кнопку и Поле добавления описания когда пользователь нажимает кнопку, запрошенный объект помещается в массив components, который обрабатывается как

onClick(component: string) {
  switch(component) {
    case 'button': data = new Button(); break;
    case 'description_box': data = new DescriptionBox(); break;
  }

  this.components.push({
    type: this.getTypeFromData(data),
    data: data
}

/**
 * spit class constructor name in lowercase underscored
 * Ex: DescriptionBox -> description_box
 */
private getTypeFromData(data) {
  const className = data.constructor.name.split(/(?=[A-Z])/);

  let componentType = '';
  for (const name of className) {
    componentType += name + '_';
  }

  return componentType.toLowerCase().slice(0, -1);
}

Эти два класса похожи на

components.ts

export class Button {
  label: string;
  color: {
    label: string;
    button: string;
    border: string;
  };
  link: string;
}

export class DescriptionBox {
  text = 'New Title';
}

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

В производственной сборке экземпляр класса предоставляет объект o вместо экземпляра класса.

1 Ответ

2 голосов
/ 13 июля 2020

это происходит из-за того, что ваши классы были уменьшены, поэтому это займет меньше места. Вместо проверки constructor.name вы можете проверить это с помощью data instanceof DescriptionBox.

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