【问题标题】:Mapping between two different Angular models两个不同 Angular 模型之间的映射
【发布时间】: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"
       }]
    }]
   }

【问题讨论】:

    标签: json angular typescript rxjs


    【解决方案1】:

    我不确定你到底在哪里得到错误,但我做了以下操作,它将Order 转换为OrderActionhttps://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
    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 2012-12-25
    • 2015-03-24
    • 1970-01-01
    • 2021-02-03
    • 2021-01-20
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多