只能从Checkbox事件访问一个类变量

时间:2017-11-04 22:26:47

标签: javascript angularjs typescript events

我确信这是一个菜鸟错误,所以请原谅我,因为我是AngularJS的新人(本周)。

我有一个输入,如下面的复选框,它连接到ng-change事件。

<input type="checkbox" ng-model="vm.hasCondoKey" ng-change="vm.onKeyCheckboxChange()" />

该^事件触发并运行控制器中的“onKeyCheckBoxChange”函数。

export class CondoKeyController {

    public condoKey: AdditionalItemModel;
    public additionalItems: AdditionalItemModel[];
    public hasCondoKey: boolean = false;

    static $inject = ["$scope","CondoKeyService"];

    constructor($scope: any, CondoKeyService: ICondoKeyService) {

        $scope.additionalItems.forEach((addOn: AdditionalItemModel, index: number, addOnArray: AdditionalItemModel[]) => {

            if (addOn.typeId === Models.AdditionalItemType.CONDO_KEY && addOn.quantity > 0) {
                this.condoKey = addOn;
                this.hasCondoKey = true;
            }
        });
    }

    public onKeyCheckboxChange(): void {
        console.log("Checkbox changed.");
        if(this.hasCondoKey === true) {
            this.condoKey.typeId = AdditionalItemType.CONDO_KEY;
            this.condoKey.quantity = 1;

            if(!this.addOnsContainCondoKey()) {
                this.additionalItems.push(_this.condoKey);
            }
        } else {
            this.condoKey.quantity = 0;
        }
    }
}

“CondoKeyController”嵌套在父级中,父级通过指令将数组“additionalItems”传递给此控制器。我可以在其他函数中看到这些其他变量,并在构造控制器时使它们很好地进入控制器。

我的问题是在函数“onKeyCheckBoxChange”中我可以访问“this.hasCondoKey”但我无法访问任何其他值,例如“this.condoKey”或“this.additionalItems”。

我认为这与我的函数的范围和上下文有关,因为它来自一个复选框事件,但后来我推断我不应该访问“this.hasCondoKey”值。此值从我的断点读取为“true”,因此它已从其初始化值更改。

有谁知道为什么我可以访问某些变量而不是其他变量?另外我如何访问其他变量?

Angularjs 1.6.6 打字稿~2.3.1

1 个答案:

答案 0 :(得分:1)

添加一些调试帮助日志到该方法:

public onKeyCheckboxChange(): void {
        console.log("Checkbox changed.");
        console.log(this.condoKey);
        console.log(this.additionalItems);
        // ...
}

检查结果。 condoKeyadditionalItems可能未定义,这意味着它们永远不会被设置。