为什么我的JavaScript构造函数返回默认属性值而不是修改后的默认值?

时间:2019-09-17 09:33:14

标签: javascript angularjs typescript

我正在使用Material Steppers开发小型AngularJS应用程序。

我必须从页面的两个部分中选择项目,并且仅当两个部分中的项目属于ID为({ {1}})1.

true

我也有这项服务:

categoryID

问题:

假设我处于两个if语句都返回class Controller { constructor($mdStepper, validationService) { this.$mdStepper = $mdStepper; this.isTriggerA = true; this.isTriggerB = true; this.clickedStepNumber = 0; static get $inject() { return [ '$mdStepper', 'validationService' ]; } getCurrentStep() { this.steppers = this.$mdStepper('stepper'); const steps = this.steppers.steps; steps.forEach((el, index) => { let step = this.steppers.steps[index]; if (step.isClicked()) { this.clickedStepNumber = step.stepNumber; } }); } checkCategory() { this.getCurrentStep(); if (this.filter.provider) { let categoryID = parseInt(this.filter.category.id, 10); console.log('Cid: ' + categoryID); if (categoryID !== 1) { this.isTestPassed = false; } else { if (parseInt(this.clickedStepNumber, 10) === 1) { this.isTriggerA = true; console.log('Step: ' + this.clickedStepNumber); console.log("A1: " + this.isTriggerA); console.log("B1: " + this.isTriggerB); } if (parseInt(this.clickedStepNumber, 10) === 2) { this.isTriggerB = true; console.log('Step: ' + this.clickedStepNumber); console.log("A2: " + this.isTriggerA); console.log("B2: " + this.isTriggerB); } if (this.isTriggerA === true && this.isTriggerB === true) { this.isTestPassed = true; } else { this.isTestPassed = false; } } } } } 的情况。从这一点开始,我在第一个块(步骤)中进行了更改,以使其返回export default class validationService { constructor() { this.isTestPassed = true; } }

第二个块中的if不能“记住”第一个块中的if返回的值。它返回到构造函数顶部的值。

这意味着下面的代码块

false

早早返回true-在 this.isTriggerA this.isTriggerB 都成立之前。

我需要脚本始终意识到两个块的“状态” 。

注意:我无法在代码开始时将trueif (this.isTriggerA === true && this.isTriggerB === true) { this.isTestPassed = true; } else { this.isTestPassed = false; } 设置为false,如果也未选择任何内容,则需要返回true。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

在应用程序顶部,您声明:

    this.isTriggerA = true;
    this.isTriggerB = true;

这意味着两者的默认值均为true,因此如果您的if条件都为

if (parseInt(this.clickedStepNumber, 10) === 1) 

if (parseInt(this.clickedStepNumber, 10) === 2)

为假,最后一条语句this.isTriggerA === true && this.isTriggerB === true将始终为真。

要默认情况下不执行此操作,请在代码开头将isTriggerAisTriggerB设置为false

由于您的情况是:

  

我必须从页面的两个部分中选择项目,并且仅当两个部分中的项目都属于ID为(categoryID)1的类别时才返回true。

默认情况下将这两个值保持为真是没有意义的