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
未定义。
编辑:因为它是输入,所以很明显父组件将空引用传递给结果。尝试在父级上初始化它。
我认为您没有将结果变量定义为对象并在 constructor
或 ngOnInit
中启动,以适合您的用例为准,如下所示
class component extends OnInit {
public results: object<{rulesFired: Array<any>}>;
constructor() {
this.results: {rulesFired: []}
}
}
可能是因为您从其父组件将 Input() results
值作为 null 传递。确保将 Input() results
值传递给该组件。
如果存在您稍后将传递该 Input() results
值的情况,请在调用 this.results
.
之前进行空检查
我有以下 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
未定义。
编辑:因为它是输入,所以很明显父组件将空引用传递给结果。尝试在父级上初始化它。
我认为您没有将结果变量定义为对象并在 constructor
或 ngOnInit
中启动,以适合您的用例为准,如下所示
class component extends OnInit {
public results: object<{rulesFired: Array<any>}>;
constructor() {
this.results: {rulesFired: []}
}
}
可能是因为您从其父组件将 Input() results
值作为 null 传递。确保将 Input() results
值传递给该组件。
如果存在您稍后将传递该 Input() results
值的情况,请在调用 this.results
.