this.results.rulesFired 没有得到定义

this.results.rulesFired not getting defined

我有以下 table 行

<tr *ngFor="let firedRule of splitRules(results.rulesFired); let rowNumber = index"
            [class.added]="isAdd(firedRule)"
            [class.removed]="isRemove(firedRule)"
            [class.modified]="isModify(firedRule)">

这里是 splitRules 函数,它基本上接收规则列表并将每个规则分解为新属性:

splitRules(firedRules: FiredRule[]) {
const regExRowNumber = /row\s*([0-9]+)/;
let rowMatch = [];
firedRules.forEach(rule => {
  let name = '';
  name = rule.ruleName.toLowerCase();
  rowMatch = regExRowNumber.exec(name);
  const rowNumber = rowMatch[1];
  const ruleName = name.substr(rowMatch[0].length).split('-')[0];
  const conditionsMatched = name.substr(rowMatch[0].length).split('-')[1];
  rule.groupName = ruleName.trim().replace('!', ': ').split(':')[0];
  rule.definitionName = ruleName.trim().replace('!', ': ').split(':')[1];
  rule.rowNumber = rowNumber;
  rule.conditionsMatched = conditionsMatched.trim();
  rowMatch = [];
});
return firedRules;

}

在 html 中调用 splitRules 方法不是一个好习惯,所以我尝试在 ngOnInit 上这样调用它:

@Input() results: RulesEngineResponse;
ngOnInit(): void {
   this.results.rulesFired = this.splitRules(this.results.rulesFired);
}

并删除来自 html 的调用,但是,我得到了 ERROR TypeError: Cannot read property 'rulesFired' of null,是否有办法解决这个问题?

如有任何帮助,我将不胜感激。

简单。 this.results 未定义。

编辑:因为它是输入,所以很明显父组件将空引用传递给结果。尝试在父级上初始化它。

我认为您没有将结果变量定义为对象并在 constructorngOnInit 中启动,以适合您的用例为准,如下所示

class component extends OnInit {
  public results: object<{rulesFired: Array<any>}>;

  constructor() {
   this.results: {rulesFired: []}
  }
   
}

可能是因为您从其父组件将 Input() results 值作为 null 传递。确保将 Input() results 值传递给该组件。 如果存在您稍后将传递该 Input() results 值的情况,请在调用 this.results.

之前进行空检查