【问题标题】:Using a Getter in Angular 5 and Typescript在 Angular 5 和 Typescript 中使用 Getter
【发布时间】:2018-04-02 18:45:24
【问题描述】:

我在 Typescript 类中设置 Getter 时遇到问题,可以使用一些帮助来理解我所缺少的内容。我有这样的课:

export class Parameter {
    constructor(
        public dataType: string = '',
        public title: string = '',
        public index: string = '',
        public values: Value[] = [],
        public isValid: boolean = false;
    ) {}
}

使用这个效果很好。

isValid 属性当前正在外部设置,但它基于存储在“values”数组中的值。我认为在外部设置这个值是愚蠢和低效的,相反我应该将 isValid 设置为只读属性。有道理?出于这个问题的目的,我将设置一些简单的逻辑。所以这里是重写的类。

export class Parameter {
    constructor(
        public dataType: string = '',
        public title: string = '',
        public index: string = '',
        public values: Value[] = []
    ) {}

        get isValid(): boolean {
          return false; 
    }
}

当我运行代码并尝试从实例化的 Parameter 类访问 isValid 时(在前面的示例中运行良好)。现在,当我检查该类时,isValid 属性是“未定义的”。我在 Getter 中设置了一个断点,断点永远不会被击中。我一定是在定义这个错误,或者误解了我在这里要做的事情。

谁能帮我理解?谢谢!

编辑:我将 isValid() 代码更改为仅返回 false,因为我的示例代码使人们感到困惑。即使它只是返回 false,它仍然返回为“未定义”。

【问题讨论】:

  • 你在哪一行设置断点?并非isValid() 的所有代码路径都返回一个值。所以isValidundefineddataType !== 'dateTime' 的预期行为
  • get isValid(): boolean { return this.dateType === 'dateTime' && this.values[0].value !== ''; }
  • 请看我上面的编辑。我将代码更改为仅从 isValid() 返回 false,但它仍然返回未定义。
  • 您的代码按预期工作。 StackBlitz
  • examine the class 是什么意思?它不只是在调试器中,是吗?您尝试将 instance.isValid 分配给变量并打印该变量?m,对吗?

标签: angular typescript


【解决方案1】:

如果 this.dataType === 'datetime'false 该方法将返回 undefined 。在这种情况下,您必须返回 false

get isValid(): boolean {
        if (this.dataType === 'datetime') {
            return this.values[0].value !== '';
        } 
return false;
    }

【讨论】:

  • 请看我上面的编辑。我将代码更改为仅从 isValid() 返回 false,但它仍然返回未定义。
【解决方案2】:

您需要实例化您的Parameter 对象,即let p = new Parameter('foo', ...);

如果您只是从 JSON 对象进行强制转换,则函数(包括 getter/setter)将是未定义的:

// doesn't work. getter will be undefined.
let p: Parameter = {
    dataType: 'foo',
    ...
};

【讨论】:

  • “当我运行代码并尝试从实例化的 Parameter 类中访问 isValid 时(在前面的示例中运行良好)。”
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多