两个不同 Angular 模型之间的映射
Posted
技术标签:
【中文标题】两个不同 Angular 模型之间的映射【英文标题】:Mapping between two different Angular models 【发布时间】:2021-05-23 00:44:48 【问题描述】:我正在尝试将 Order.ts 映射到 OrderAction.ts,但收到错误无法准备好未定义的属性“0”。当我尝试将 Order 属性映射到 OrderAction 属性时出现此错误。
这里是 Order.ts:
export class Order
OrderId: number;
FunctionStatusList?: OrderFunctionStatus[];
export class OrderFunctionStatus
FunctionTypeCode: number;
AvailableActions: OrderAvailableAction[];
export class OrderAvailableAction
ActionLabel: string;
ActionValue: string;
这是 OrderAction.ts:
export class OrderAction
FunctionTypeCode: number;
SelectedAction: string;
OrderList: AvailableAction[];
export class AvailableAction
OrderId: number;
IsAvailableAction: boolean;
AvailableActions?: OrderAvailableAction[];
这是我写的代码:
orders: any[] = [];
orderActionList: any[] = [];
ngOnInit()
this.orders = this.orderService.getCheckedOrders();
this.orders.forEach((order: Order, i) =>
let orderAction: OrderAction = new OrderAction();
orderAction.OrderList[i].OrderId = order.OrderId;
orderAction.FunctionTypeCode = order.FunctionStatusList[i].FunctionTypeCode;
orderAction.AvailableActions = order.FunctionStatusList[i].AvailableActions;
orderAction.IsAvailableAction = order.FunctionStatusList[i].AvailableActions.length > 0 == true || false;
this.orderActionList.push(orderAction);
);
这是 Order.ts json 的示例:
"OrderId": "1",
"FunctionStatusList": [
"FunctionTypeCode": "1",
"AvailableActions": [
"ActionLabel": "1",
"ActionValue": "1"
]
]
这是 OrderAction.ts json 的示例:
"FunctionTypeCode": "1",
"SelectedAction: "1",
"OrderList": [
"OrderId": "1",
"IsAvailableActionsLoaded": "1",
"AvailableActions": [
"ActionLabel": "1",
"ActionValue": "1"
]
]
【问题讨论】:
【参考方案1】:我不确定你到底在哪里得到错误,但我做了以下操作,它将Order
转换为OrderAction
:https://plnkr.co/edit/VEHAdk3qPRIFkEAU?preview
代码的核心是这样的:
this.orders.forEach((order: Order, i) =>
this.orderActions.push(
FunctionTypeCode: order.FunctionStatusList[i].FunctionTypeCode,
SelectedAction: null,
OrderList: [
OrderId: order.OrderId,
IsAvailableActionsLoaded:
order.FunctionStatusList[i].AvailableActions.length > 0,
AvailableActions: order.FunctionStatusList[i].AvailableActions,
,
],
);
);
我将 SelectedAction
保留为 null,因为不清楚如何设置此值。
【讨论】:
我认为我遇到的问题之一是 FunctionStatusList 是 OrderFunctionStatus[] 的数组,因此循环遍历列表订单不允许我循环遍历 FunctionStatusList。我们可以在一个房间里讨论这个问题,以便我可以向您展示我正在尝试的代码吗? 所以一个Order中可以有多个FunctionTypeCode,而OrderAction中只有一个。如果它们不同,哪一个会赢?至于 AvailableActions,您可以将它们收集在一个单独的数组中,并在检查完所有 FunctionStatusLists 后将其设置为 AvailableActions以上是关于两个不同 Angular 模型之间的映射的主要内容,如果未能解决你的问题,请参考以下文章