this.results.rulesFired не определяется - PullRequest
0 голосов
/ 10 июля 2020

У меня есть следующие строки таблицы

<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;

}

Не рекомендуется вызывать метод splitRules внутри html, поэтому я попытался вызвать его на ngOnInit следующим образом:

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

И удалить Звоните с html, но я получил ERROR TypeError: Cannot read property 'rulesFired' of null, есть ли способ исправить это?

Буду признателен за любую помощь.

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Я думаю, вы не определили переменную результатов как объект и не инициируете в constructor или ngOnInit в зависимости от того, что подходит вашим вариантам использования, как показано ниже

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

  constructor() {
   this.results: {rulesFired: []}
  }
   
}
1 голос
/ 10 июля 2020

Это может быть потому, что вы передаете значение Input() results как нулевое из его родительского компонента. Убедитесь, что вы передали этому компоненту значение Input() results. Если есть сценарий, при котором вы передадите это значение Input() results позже, сделайте нулевую проверку перед вызовом this.results.

1 голос
/ 10 июля 2020

Просто. this.results не определено.

Изменить: так как это ввод, ясно, что родительский компонент передает пустую ссылку на результат. Попробуйте инициализировать его на родительском.

...