角:设置后如何在组件中获取常量值?

时间:2018-11-12 13:26:54

标签: angular typescript

我在 constants.ts 文件中有这样的定单数组

       export const ORDERS = [
           {
            'id': 'PROCESSING',
            'displayName': null
           },
           {
            'id': 'SHIPPED',
            'displayName': null
           }
        ];

在我的组件中,我正在设置'displayName'的值

import { ORDERS } from './constants';
-----------------
--------------
setOrders() {
        ORDERS.forEach((order: any) => {

        if(order.id === 'PROCESSING') {
           order.displayName = 'Processing';
        }

        if(order.id === 'SHIPPED') {
           order.displayName = 'Shipped';
        }

     });
    }

但是在这里,当我尝试在另一个函数中获取'displayName'的值时,它返回null,但是按照对象顺序,我可以看到'displayName'的值

getOrders() {
        ORDERS.forEach((order: any) => {
                console.log(order); // displayName exists in the object
                console.log(order.displayName); // But here null
        });
    }

两个功能都在同一组件中。请帮我解决这个感谢。

更新:全面实施

getTimePeriod() {
        return Promise.resolve((() => {

            this.orderService.getTimePeriod()
                .subscribe(
                    (data) => {
                        this.orderStatusList = data.configParameters;
                        this.orderStatusList.forEach(
                            (s: any) => {
                                if (s.status === 'PROCESSING') { this.setOrders(s.status, s.name); }

                                if (s.status === 'SHIPPED') { this.setOrders((s.status, s.name); }
                            }
                        );
                    },
                    error => {
                        this.errorMessage = this.orderService.handleError(error);
                    }
                );
                })());
    }

    setOrders(status, name) {
        ORDERS.forEach((order: any) => {
            if (order.id === status) {
                order.displayName = name;
            }
        });
    }

     getOrders() {
        return Promise.resolve((() => {

        ORDERS.forEach((order: any) => {
            const { displayName } = order;

            console.log(order); // displayName exists in order
            console.log(displayName); // Null

            this.orderService.getOrdersByDisplayName(buildQuery(null, displayName, null, null))
                .subscribe(
                    (data) => {
                        this.ordersWidgetInfo.push({

                            ...order,
                            ...data,
                            number: data.orders && data.orders.length,
                        });
                    },
                    error => {
                        console.log(`error for ${orderType} : ${error}`);
                    }
                );
        }
        );
        })());
    }

1 个答案:

答案 0 :(得分:0)

这样的错误发生的唯一方式(除了错误的代码)是无效的执行顺序。

但是,在尝试您的代码之后,它似乎可以正常工作。 See example on JSFiddle

这使我得出结论,您的问题很可能是在getOrders之前调用了setOrders,因此是空值。要解决此问题,请先致电setOrders,然后再致电getOrders