我正在使用Angular 15和PrimeNG。
{
id: 1,
data: {
value: "Lorem ipsum"
},
expression: null,
subElements: [
{
id: 2,
data: {
value: 2
},
expression: "v0 / v1",
subElements: [
{
id: 4,
data: {
value: 100
},
expression: null,
subElements: []
},
{
id: 5,
data: {
value: 50
},
expression: "v0 + v1",
subElements: [
{
id: 6,
data: {
value: 20
},
expression: null,
subElements: []
},
{
id: 7,
data: {
value: 30
},
expression: null,
subElements: []
}
]
}
]
},
{
id: 3,
data: {
value: "Lorem ipsum"
},
expression: null,
subElements: []
}
]
}
例如,如果id为7的对象的值从30更改为40,则根据父对象中的表达式(“v0 + v1”)及其父对象的值(id:2)也应该根据其表达式(“v0 / v1”)进行更新。我使用math.js进行计算。对象嵌套级别的数量不是固定的,并且并非所有对象都具有数值。应忽略非数值对象。我使用p-tree来遍历对象并显示它们的输入。这是我的输入字段:
<p-inputNumber
[(ngModel)]="node.data.value"
(onInput)="calculateExpression($event, node)"
[minFractionDigits]="2"
[maxFractionDigits]="2"
></p-inputNumber>
我所做的一切都不值得一提。
1条答案
按热度按时间brccelvz1#
你可以使用后序递归迭代遍历树,并生成一个新的树,其中所有的表达式都被重新求值:
如果你需要原始的层次结构被突变为 inplace,那么: