Я использую 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
вместо экземпляра класса.