我有带有对象数组的角度分量
export class AlertsConfigListComponent implements OnInit, DoCheck {
@Input() config: ProductAlertConfig[];
Run Code Online (Sandbox Code Playgroud)
并使用 IterableDiffer 来获取该数组的更改:
constructor(private iterableDiffers: IterableDiffers) {
this.iterableDiffer = iterableDiffers.find([]).create(null);
}
ngDoCheck(): void {
let changes : IterableChanges<ProductAlertConfig> = this.iterableDiffer.diff(this.config);
if (changes) {
this.doSmth();
}
Run Code Online (Sandbox Code Playgroud)
}
它有效,每次更改数组时我都可以得到更改。所以现在我的问题是。如何检查数组大小已更改的更改对象,因为当我对此数组进行排序时也会触发它。IterableChanges对象中没有用于此目的的属性。
如果我可以获得新的数组大小,我会这样做:
ngDoCheck(): void {
let changes : IterableChanges<ProductAlertConfig> = this.iterableDiffer.diff(this.config);
if (changes && newSize !== oldSize) {
this.doSmth();
}
Run Code Online (Sandbox Code Playgroud)
}
它可以解决问题,但是还有其他解决方案吗?
我创建了一个简单的表格来说明我的问题:
DECLARE @Test TABLE
(
id int,
Type VARCHAR(10),
SectionId int
)
Insert into @Test
SELECT 1,'RED', 100
UNION ALL SELECT 2, 'RED', 100
UNION ALL SELECT 3, 'BLUE', 100
UNION ALL SELECT 4, 'RED', 200
UNION ALL SELECT 5, 'BLUE', 200
UNION ALL SELECT 6, 'RED', 300
UNION ALL SELECT 7, 'BLUE', 300
UNION ALL SELECT 8, 'BLUE', 300
Run Code Online (Sandbox Code Playgroud)
所以我想为每一行提供行号,但在Type和SectionId 相同时重复它:
id, Type, SectionId, RowNumber
1, 'RED', 100 1
2, 'RED', 100 1
3, 'BLUE',100 …Run Code Online (Sandbox Code Playgroud)