【问题标题】:How to list all component properties如何列出所有组件属性
【发布时间】:2018-11-14 23:18:24
【问题描述】:

我想在 Angular 中列出所有组件属性(私有和公共)。

我已经尝试了以下

ngOnInit() {
    console.log(this.constructor.prototype);
}

但这只是打印定义了getter 方法的属性。它不打印没有getterssetters 的属性。它还打印组件methods,我不介意。

奇怪的是,它甚至没有显示公共属性(没有 getter)。

我也试过了

console.log(this.constructor.prototype.hasOwnProperty('_queryState'));

但它返回给我false,这意味着它无法识别该属性。

虽然这个question 对我没有帮助。

如何列出所有属性?

如果有人问我为什么需要这样做,那是为了进行单元测试。

【问题讨论】:

  • @Ric 仍然打印相同的结果。没有打印私有属性。
  • 属性初始化了吗? stackoverflow.com/questions/49174696/…
  • @TitianCernicova-Dragomir 不,但我在初始化私有属性后尝试打印它们。它仍然不存在于结果中
  • 如果属性已初始化,如果您使用Object.keys,它们将显示出来,它们不会出现在原型上,因为它们不存在它们是实例级字段

标签: angular unit-testing typescript properties


【解决方案1】:

你可以使用 javascript Object.keys

let component = {a: 17, b: 'test', c: [17, 17, 17]};
let keys = Object.keys(component);

for(let key of keys) {
  console.log('component[' + key + '] = ' + component[key]);
}

Here is a running stackblitz example.

【讨论】:

  • 组件在我的例子中不是一个 javascript 对象。它是一个角度分量。而且Object.keys(this.construtor.prototype) 也不会打印私有属性,即使它们已被初始化。
  • 你如何声明你的组件? stackblitz 示例将一个角度组件属性记录到控制台中。
  • 对不起,我弄糊涂了。如果我不先初始化私有属性,它们就不会出现。我想我真的没有一个很好的方法来做到这一点。 stackoverflow.com/questions/49174696/….
猜你喜欢
  • 2010-11-15
  • 2011-11-07
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2013-12-08
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多