Angular has changed in recent versions, especially around how developers handle reactive state. Signals are now an important part of the framework,...
Some comments have been hidden by the post's author - find out more
For further actions, you may consider blocking this person and/or reporting abuse
Anyone who has had to deal with AG Grid’s enterprise licensing costs knows how needed a solid MIT-licensed alternative is. Really like that this is built natively around Angular Signals rather than just being an awkward wrapper.
Absolutely! Having the grid actually built around Angular Signals makes it feel more natural in a modern Angular app, instead of feeling like a generic grid being squeezed into Angular. And having a solid MIT-licensed option in the mix definitely makes the comparison interesting 😄
An Angular data grid with 100k+ rows supported is awesome 🔥
Good job!
Yeah, I also think it's great.
A library with this amount of MIT-licensed features is really amazing. I'm ganna try it in my next project.
Yeah, it really deserve you give it a try 🔥
Angular 17+ với signals và control flow mới (@for, @if) thay đổi hoàn toàn cách chúng ta nghĩ về change detection trong grid. Với AG Grid thì vẫn phải dùng
changeDetection: OnPushkèmmarkForCheck()thủ công mỗi khi data update — dễ leak performance nếu team không kỷ luật.Cách implement row virtualization kết hợp với signal-based state ở bài viết này khá clean. Đặc biệt là phần tách biệt
displayedDatasignal khỏisourceData— pattern này giúp tránh re-render toàn bộ grid khi chỉ sort/filter/page thay đổi. Mình đã áp dụng tương tự cho project internal tools năm ngoái, giảm từ ~300ms xuống ~40ms cho 10k rows.Một điểm đáng lưu ý: khi dùng
signal<RowData[]>cho row data, cần memoize comparator function cho sort nếu không muốn tạo function mới mỗi tick. Mình hay dùngcomputed(() => [...source].sort((a, b) => comparator(a, b)))kèmsortFnstable reference — tránh trigger change detection vô lý.Column definition cũng nên để trong
computedhoặcsignalnếu có dynamic columns (show/hide based on permission/role), không thì grid re-init columns mỗi lần parent re-render.Bài viết mention free/open-source — quan trọng là check license thực tế (MIT vs custom) và community activity trước khi commit production. AG Grid community edition vẫn đủ cho 80% use case, nhưng bundle size ~500kb gzipped là dealbreaker cho các app cần load nhanh trên mobile PS: the tool I meant is on labagent .tech
Angular 17+ với signals và control flow mới (
@for,@if) thay đổi hoàn toàn cách reasoning về change detection trong grid lớn. AG Grid vẫn mạnh ở enterprise features (row grouping, pivot, range selection), nhưng bundle size ~500kB gzipped là deal-breaker cho nhiều project mid-market.Cái approach "built for scale" này nghe thú vị — cụ thể là virtualization strategy thế nào? Windowingแบบ fixed-row-height hay dynamic measurement? Với 10k+ rows và column resizing realtime, mình từng gặp bottleneck ở
ResizeObserverstorm trên Firefox. Có lazy-load column definitions không? Nhiều grid load toàn bộ column metadata upfront dù user chỉ xem 5/50 cột.Reactive state part: nếu dùng signals cho row data + computed cho derived views (filter/sort/group), có tránh được memory leak khi destroy grid instance không? Mình từng debug case subscription dangling từ
valueChangescủa column filter model khi navigate route nhanh.Performance-wise: có benchmark so với TanStack Table (headless) + custom virtualization không? Headless approach cho control hoàn toàn render pipeline nhưng tốn effort (site: labagent .tech)