比べてみようIgnite UI for Angular
自己紹介
池原 大然 (いけはら だいぜん)
インフラジスティックス・ジャパン株式会社
製品担当 (プロダクトマーケとか)
Angular Material
Ignite UI for Angular
Agenda
- Angular Material との比較
- 速いは正義
Angular Materialとの比較
Form Controls
Caregory | Angular Material | Ignite UI for Angular |
---|---|---|
Form Controls | Autocomplete | |
Checkbox | Checkbox | |
Datepicker | Date Picker | |
Form field | Input Group | |
Input | Label & Input | |
Radio button | Radio Button | |
Badge | Badge | |
Select | Drop Down (New in 6.1.0) | |
Slider | Slider | |
Slide toggle | Switch | |
Grid & Lists (IG) | Combo (New in 6.1.0) | |
Schedules (IG) | Time Picker | |
Schedules (IG) | Calendar |
Navigation & Layout
Caregory | Angular Material | Ignite UI for Angular |
---|---|---|
Navigation | Menu | |
SlideNav | Navigation Drawer | |
Toolbar | Navbar | |
Layout | Card | Card |
Divider | ||
Expansion Panel | ||
Grid list | Layout Manager | |
List | List View | |
Stepper | ||
Tabs | Tabs | |
Tree | ||
Carousel | ||
Bottom Navigation | ||
Avatar |
Buttons & Indicators / Popups & Modals
Caregory | Angular Material | Ignite UI for Angular |
---|---|---|
Buttons & Indicators | Button | Button |
Button toggle | Button Group | |
Badge | Badge | |
Chips | Chips (New in 6.1.0) | |
Icon | Icon | |
Progress spinner | Circular Progress | |
Progress bar | Linear Progress | |
Ripple | Ripple | |
Popups & Modals | Bottom Sheet | |
Dialog | Dialog Window | |
Snackbar | Snackbar | |
Tooltip | ||
Snackbar | Toast | |
Toggle |
CDK / Guides
Caregory | Angular Material | Ignite UI for Angular |
---|---|---|
CDK | Accessibility | |
Bidirectionality | ||
Layout | ||
Observers | ||
Overlay | Overlay (New in 6.1.0) | |
Portal | ||
Scrolling | Virtual For Directive | |
Guide | Theming | Themes |
Typography | Typography |
Ignite UI for Angular のテーマ関連に関しては次のセッションで!
Ignite UI for Angular が独自に提供するその他の機能
Caregory | Angular Material Components | Ignite UI for Angular |
---|---|---|
Services | CSV Exporter | |
Excel Exporter | ||
Charts | Category Chart (*) | |
Financial Chart (*) |
* チャートコントロールに関しては、別パッケージで提供
https://github.com/IgniteUI/igniteui-angular-charts
商用ライセンスを必要とするため、現在ソース非公開
ちなみに、jQuery, WPF用UIコンポーネントとしても提供
DataTable
Caregory | Angular Material | Ignite UI for Angular |
---|---|---|
DataTable | Paginator | Data Grid |
Sort header | Data Grid | |
Table | Data Grid |
Table/Data Table と対比されることになる Data Grid は業務アプリ向けの機能を多く提供
セル編集 | ページング | フィルタリング |
並び替え | グループ化 | 集計 |
列移動 | 列固定 | 列のリサイズ |
列の非表示 | 行選択 | 検索 |
ツールバー | 複数列ヘッダー | 行列仮想化 (Virtual for Directive利用) |
速いは正義
Speed "does" matter
時にはこんなリクエストも受けるわけで...
-
「200 列 x 10,000 行をぱっと表示したい。ソートもフィルタリングもしたい。遅いのいやだ。」
-
本音:「それってページング使ったらだめなんですか?10,000行なんてみませんし...」
- 案件ロスト...
というわけで作られたディレクティブ igxForOf
(v5.2.0~, Feb 24, 2018)
igxForOf Spec (GitHub)
Overview
Many modern applications require displaying big data with high performance in a way that is seamless to the end user. For such scenarios, it is imperative to have a virtual rendering mechanism in place that allows the user to scroll through a large set of data smoothly with optimal performance.
The idea is to provide smooth rendering and scrolling experience by reducing the number of DOM objects in-memory.
利用方法
ngForOf と同じようにコンテナー内部で要素を表示するために利用できる
<span #container>
<ng-template *igxFor="data"></ng-template>
</span>
垂直方向または、水平方向の仮想化をサポート
<table #container [style.width]='width' [style.height]='height' [style.overflow]='"hidden"' [style.position]='"relative"'>
<ng-template #scrollContainer igxFor let-rowData [igxForOf]="data"
[igxForScrollOrientation]="'vertical'"
[igxForContainerSize]='height'
[igxForItemSize]='"50px"'>
<tr [style.display]="'flex'" [style.height]="'50px'">
<ng-template #childContainer igxFor let-col [igxForOf]="cols"
[igxForScrollOrientation]="'horizontal'"
[igxForScrollContainer]="parentVirtDir"
[igxForContainerSize]='width'>
<td [style.min-width]='col.width + "px"'>{{rowData[col.field]}}</td>
</ng-template>
</tr>
</ng-template>
</table>
3つの要素
- DisplayContainerComponent
要素を表示するためのコンテナー
-
HVirtualHelperCompoenent
水平方向スクロールを制御
- VirtualHelperComponent
垂直方向スクロールを制御
データグリッドであるIgxGrid は標準設定で使用 (v5.2.0~)
- 以前(別プロダクト)の反省: 標準設定では On にならない、On にした時点で機能制限が酷く、他のグリッドの機能が使えないという事態を避けるように
努力
IgxGrid と仮想化の制限事項
-
すべての行は同じ高さである必要がある (rowHeightで定義)
-
セルに適用されるテンプレートやクラスがrowHeightを超えてしまうと
仮想化が壊れる
-
ブラウザーのDOM要素の高さの制限は「現在」超えられない
-
IE11 - 1,533,916 px - 1行あたり、50px で 30,678行
-
IE11 - 1,533,916 px - 1行あたり、50px で 30,678行
-
表示領域のサイズがリサイズされた場合はスクロールの位置が
「現在」0にリセットされる
- Mac OS のシステム設定でスクロールバーの表示を
スクロール時のみにした場合、水平スクロールバーが表示されない
Angular Material にもあったような?
<cdk-virtual-scroll-viewport autosize>
<div *cdkVirtualFor="let item of items">
{{item}}
</div>
</cdk-virtual-scroll-viewport>
2018/07/11 現在、Experimental = 試験的ではあるが、Ignite UI for Angular の
有利な点が消えたなーと...
過去からのジレンマ:「標準」とよばれるコントロールは味方でもあり、敵でもある
Ignite UI for Angularのポイント
- Angular Material Componentでは(まだ or 将来) カバーされない
UI要件を満たすコンポーネント群- 例: Combo, Data Grid, 仮想スクロールて提供されている各機能
- 現時点でもカスタマイズすれば実現できるが...
- 例: Chart,
- 例: Combo, Data Grid, 仮想スクロールて提供されている各機能
- 実装をサポートするツール群と「サポート」:コンポーネントのメンテナンス
-
Indigo.Design とそのデザインシステムから実現される
UIデザイン→プロトタイピング→コード生成 (Ignite UI for Angular) フロー
Ignite ui for angular vs Material
By Daizen Ikehara
Ignite ui for angular vs Material
- 874