【问题标题】:How to access a variable from another function in the same class in Angular?如何从Angular中同一类中的另一个函数访问变量?
【发布时间】:2020-06-12 10:49:39
【问题描述】:

我有一个(初学者)问题,有人可以告诉我如何重构/重写我的逻辑,以便我可以访问 evaluateResult 函数中的 namesSplit 变量吗?

export class ExecutableVariableNode implements IExecutableNode {
execute(treeNode: ExpressionTreeNode, exprData: ExpressionData): any {
    let namesSplit = treeNode.name.split('.');
    let key = namesSplit[0];
    let contextEntry = exprData.contextEntry.find(_x => _x.name === key);

    if (namesSplit.length > 1) {
        this.evaluateResult(contextEntry.value);
    }
}

isPrimitive(test): boolean {
    return typeof test !== 'object';
}


// Get Values
evaluateResult(val) {
    if (this.getType(val) === ExpressionVariableType.OBJECT) {
        return Object.values(val);
    }
    else if (this.getType(val) === ExpressionVariableType.ARRAY_OF_OBJECTS) {
        for (let obs of val) {
            for (let n = 0; n < namesSplit.length; n++) {
                if (namesSplit[n] == Object.keys(obs)) {
                    let result = Object.values(obs);
                    console.log(result);
                    break;
                }
            }
        }
    }
    else if (this.getType(val) === LapsExpressionVariableType.ARRAY_OF_PRIMITIVES) {
        throw new StdException('Array of Primitives not allowed!');
    }
    else if (this.getType(val) === LapsExpressionVariableType.PRIMITIVE) {
        throw new StdException('Primtive values not allowed!');
    }
}

}

【问题讨论】:

  • 把它移到外面,s.t.它被声明为类的全局成员,或将其作为参数传递给 evaluateResult
  • 我已经尝试过了,但是我得到一个错误 (TS1068),告诉我我有一个意外的令牌!
  • 您可以使用服务共享变量 ex : stackoverflow.com/questions/50297742/…

标签: javascript angular typescript


【解决方案1】:

将你的变量创建为全局变量,然后你可以像这样在类中访问它。

export class ExecutableVariableNode implements IExecutableNode {

    namesSplit: any;

    execute(treeNode: ExpressionTreeNode, exprData: ExpressionData): any {
        this.namesSplit = treeNode.name.split('.');
        let key = this.namesSplit[0];
        let contextEntry = exprData.contextEntry.find(_x => _x.name === key);

        if (this.namesSplit.length > 1) {
            this.evaluateResult(contextEntry.value);
        }
    }

    isPrimitive(test): boolean {
        return typeof test !== 'object';
    }


    // Get Values
    evaluateResult(val) {
        if (this.getType(val) === ExpressionVariableType.OBJECT) {
            return Object.values(val);
        }
        else if (this.getType(val) === ExpressionVariableType.ARRAY_OF_OBJECTS) {
            for (let obs of val) {
                for (let n = 0; n < this.namesSplit.length; n++) {
                    if (this.namesSplit[n] == Object.keys(obs)) {
                        let result = Object.values(obs);
                        console.log(result);
                        break;
                    }
                }
            }
        }
        else if (this.getType(val) === LapsExpressionVariableType.ARRAY_OF_PRIMITIVES) {
            throw new StdException('Array of Primitives not allowed!');
        }
        else if (this.getType(val) === LapsExpressionVariableType.PRIMITIVE) {
            throw new StdException('Primtive values not allowed!');
        }
    }
}

【讨论】:

  • 非常感谢,为我做了!
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多