lightning:datatable
lightning:datatable コンポーネントには、表形式データが表示され、そこにデータ型に応じて各列が表示されます。たとえば、email 型を指定すると、mailto: URL スキームが付いているハイパーリンクとしてメールアドレスを表示します。デフォルトの型は text です。
このコンポーネントは、Lightning Design System のデータテーブルからスタイル設定を継承します。
- 適用するデータ型による列の表示と書式設定
- 行の無限スクロール
- ヘッダーレベルのアクション
- 行レベルのアクション
- 列のサイズ変更
- 行の選択
- 昇順または降順による列の並び替え
- テキストの折り返しとクリッピング
テーブルは、data、columns、keyField 属性を使用して、初期化中に生成されます。この例では、6 つの列を含むテーブルが作成され、1 列目に行選択のチェックボックスが表示されます。テーブルデータは、init ハンドラを使用して読み込まれます。チェックボックスをオンにすると、データの行全体が選択されて、onrowselection イベントハンドラをトリガできます。
1<aura:component>
2 <aura:attribute name="mydata" type="Object"/>
3 <aura:attribute name="mycolumns" type="List"/>
4 <aura:handler name="init" value="{! this }" action="{! c.init }"/>
5 <lightning:datatable data="{! v.mydata }"
6 columns="{! v.mycolumns }"
7 keyField="id"
8 onrowselection="{! c.getSelectedName }"/>
9</aura:component>選択可能な行と columns オブジェクトを、対応する列データに作成するクライアント側コントローラを次に示します。[Confidence (信頼性)] 列には、パーセントと信頼性トレンドの向上または低下を示すアイコンが表示されます。
1({
2 init: function (cmp, event, helper) {
3 cmp.set('v.mycolumns', [
4 {label: 'Opportunity name', fieldName: 'opportunityName', type: 'text'},
5 {label: 'Confidence', fieldName: 'confidence', type: 'percent', cellAttributes:
6 { iconName: { fieldName: 'trendIcon' }, iconPosition: 'right' }},
7 {label: 'Amount', fieldName: 'amount', type: 'currency', typeAttributes: { currencyCode: 'EUR'}},
8 {label: 'Contact Email', fieldName: 'contact', type: 'email'},
9 {label: 'Contact Phone', fieldName: 'phone', type: 'phone'}
10 ]);
11 cmp.set('v.mydata', [{
12 id: 'a',
13 opportunityName: 'Cloudhub',
14 confidence: 0.2,
15 amount: 25000,
16 contact: 'jrogers@cloudhub.com',
17 phone: '2352235235',
18 trendIcon: 'utility:down'
19 },
20 {
21 id: 'b',
22 opportunityName: 'Quip',
23 confidence: 0.78,
24 amount: 740000,
25 contact: 'quipy@quip.com',
26 phone: '2352235235',
27 trendIcon: 'utility:up'
28 }]);
29 },
30 getSelectedName: function (cmp, event) {
31 var selectedRows = event.getParam('selectedRows');
32 // Display that fieldName of the selected rows
33 for (var i = 0; i < selectedRows.length; i++){
34 alert("You selected: " + selectedRows[i].opportunityName);
35 }
36 }
37})前述の例では、データの 1 行目では、1 列目にチェックボックスが表示されて、Cloudhub、20%、$25,000.00、jrogers@cloudhub.com、(235) 223-5235 というデータを含む列が表示されます。最後の 2 列は、メールアドレスと電話番号のハイパーリンクとして表示されます。
Apex コントローラを使用したデータの取得
Contact オブジェクトにデータを表示する場合、表示する項目を照会する Apex コントローラを作成します。
1public with sharing class ContactController {
2 @AuraEnabled
3 public static List<Contact> getContacts() {
4 List<Contact> contacts =
5 [SELECT Id, Name, Phone, Email FROM Contact];
6 //Add isAccessible() check
7 return contacts;
8 }
9}これを controller 属性によってコンポーネントに結び付けます。マークアップは前の例と似たものになります。
1<aura:component controller="ContactController">
2 <aura:attribute name="mydata" type="Object"/>
3 <aura:attribute name="mycolumns" type="List"/>
4 <aura:handler name="init" value="{! this }" action="{! c.init }"/>
5 <lightning:datatable data="{! v.mydata }"
6 columns="{! v.mycolumns }"
7 keyField="Id"
8 hideCheckboxColumn="true"/>
9</aura:component>fieldName プロパティを項目の API 参照名に対応付けることによって列データを初期化します。
1({
2 init: function (cmp, event, helper) {
3 cmp.set('v.mycolumns', [
4 {label: 'Contact Name', fieldName: 'Name', type: 'text'},
5 {label: 'Phone', fieldName: 'Phone', type: 'phone'},
6 {label: 'Email', fieldName: 'Email', type: 'email'}
7 ]);
8 helper.getData(cmp);
9 }
10})最後にヘルパー内で取引先責任者を取得します。
1({
2 getData : function(cmp) {
3 var action = cmp.get('c.getContacts');
4 action.setCallback(this, $A.getCallback(function (response) {
5 var state = response.getState();
6 if (state === "SUCCESS") {
7 cmp.set('v.mydata', response.getReturnValue());
8 } else if (state === "ERROR") {
9 var errors = response.getError();
10 console.error(errors);
11 }
12 }));
13 $A.enqueueAction(action);
14 }
15})列データの操作
列データを提供するほか、次の列プロパティを定義する必要があります。
| プロパティ | 型 | 説明 |
|---|---|---|
| label | string | 必須。列ヘッダーに表示されるテキスト表示ラベル。 |
| fieldName | string | 必須。列プロパティを関連データに結びつけるための名前。columns プロパティはそれぞれ、データ配列の項目に対応している必要があります。 |
| type | string | 必須。データ書式設定に使用するデータ型。詳細は、「データ型による書式設定」を参照してください。 |
| initialWidth | integer | 初期化されたときの列幅。minColumnWidth 値から maxColumnWidth 値までの範囲内、またはそれらが指定されていない場合は、50px ~ 1000px の範囲内である必要があります。 |
| typeAttributes | object | データ型のコンポーネント属性にカスタム書式設定を提供します。たとえば、currency 型の場合、currencyCode です。詳細は、「データ型による書式設定」を参照してください。 |
| cellAttributes | object | 出力へのアイコンの追加など、追加のカスタマイズを提供します。詳細は、「列データへのアイコンの追加」を参照してください。 |
| sortable | boolean | 列による並べ替えを有効にするかどうかを指定します。デフォルトは false です。 |
| actions | object | アクションのドロップダウンメニューを列に追加します。表示ラベル-名前のペアのリストを渡す必要があります。 |
| iconName | string | アイコンの Lightning Design System 名。名前は standard:opportunity の形式で記述します。アイコンはヘッダー表示ラベルの左に追加されます。 |
データ型による書式設定
データテーブルは、選択された型に基づいて形式を判断します。各データ型は、Lightning 基本コンポーネントに関連付けられています。たとえば、text 型を指定すると、関連データは lightning:formattedText コンポーネントを使用して表示されます。これらのデータ型の一部では、typeAttributes プロパティを介して属性を渡して出力をカスタマイズできます。サポートされる属性値については、コンポーネントのリファレンスドキュメントを参照してください。有効なデータ型とそのサポートされる属性は次のとおりです。
| 型 | 説明 | サポートされるデータ型の属性 |
|---|---|---|
| action | lightning:buttonMenu を使用してドロップダウンメニューを表示し、アクションをメニュー項目として表示します。 | rowActions (必須)、menuAlignment (デフォルトは right) |
| button | lightning:button を使用してボタンを表示します。 | disabled、iconName、iconPosition、label、name、title、variant |
| currency | lightning:formattedNumber を使用して通貨を表示します。 | currencyCode、currencyDisplayAs |
| date | lightning:formattedDateTime を使用してロケールに基づく日付と時刻を表示します。 | day、era、hour、hour12、minute、month、second、timeZone、timeZoneName、weekday、year |
| lightning:formattedEmail を使用してメールアドレスを表示します。 | なし | |
| location | lightning:formattedLocation を使用して場所の緯度と経度を表示します。 | latitude、longitude |
| number | lightning:formattedNumber を使用して数値を表示します。 | minimumIntegerDigits、minimumFractionDigits、maximumFractionDigits、minimumSignificantDigits、maximumSignificantDigits |
| percent | lightning:formattedNumber を使用してパーセントを表示します。 | number 型と同じ |
| phone | lightning:formattedPhone を使用して電話番号を表示します。 | なし |
| text | lightning:formattedText を使用してテキストを表示します。 | なし |
| url | lightning:formattedUrl を使用して URL を表示します。 | label、target |
データ型に基づいた書式設定をカスタマイズするには、対応する Lightning 基本コンポーネントの属性を渡します。たとえば、カスタム currencyCode 値を渡すと、デフォルトの通貨コードが上書きされます。
1columns: [
2 {label: 'Amount', fieldName: 'amount', type: 'currency', typeAttributes: { currencyCode: 'EUR' }}
3 // other column data
4]通貨または日時データ型を使用する場合、ロケールの書式設定が指定されていなければ、デフォルトのユーザロケールが使用されます。
これらの属性の詳細は、対応するコンポーネントのドキュメントを参照してください。
列データへのアイコンの追加データ出力にアイコンを追加するには、cellAttributes を使用し、次の属性を渡します。
| 属性 | 説明 |
|---|---|
| iconName | 必須。アイコンの Lightning Design System 名 (例: utility:down)。 |
| iconLabel | アイコンの右側に表示されるアイコンの表示ラベル。 |
| iconPosition | データに対するアイコンの位置。有効なオプションには、left と right があります。この値のデフォルトは left です。 |
アイコンは、次のような複数の方法で追加できます。
1var columns = [
2 // simple icon
3 {label: 'Close date', fieldName: 'closeDate', type: 'date', sortable: true, cellAttributes: { iconName: 'utility:event' }},
4 // icon appended with a label
5 {label: 'Confidence', fieldName: 'confidence', type: 'percent', cellAttributes:
6 { iconName: { fieldName: 'confidenceDeltaIcon' }, iconLabel: { fieldName: 'confidenceDelta' }, iconPosition: 'right' }}
7 // other column data
8 ]無限スクロールを使用すると、まずデータのサブセットを読み込み、ユーザがテーブルの最後までスクロールしたときにさらに追加して表示することができます。無限スクロールを有効にするには、enableInfiniteLoading を true ��設定し、onloadmore を使用してイベントハンドラを提供します。デフォルトでは、データの読み込みはユーザがテーブルの最下部から 20 ピクセルのところまでスクロールするとトリガされますが、loadMoreOffset 属性を使用してオフセットを変更できます。
次の例では、テーブルの末尾に達すると、読み込むデータがなくなるまで、データベースから 50 行を追加して読み込みます。ここでは、「Apex コントローラを使用したデータの取得」で説明したものと同様の init ハンドラでデータを取得することを想定しています。
1<aura:component controller="ContactController">
2 <aura:attribute name="columns" type="List" default="[]"/>
3 <aura:attribute name="data" type="List" default="[]"/>
4 <aura:attribute name="enableInfiniteLoading" type="Boolean" default="true"/>
5 <aura:attribute name="initialRows" type="Integer" default="30"/>
6 <aura:attribute name="rowsToLoad" type="Integer" default="50"/>
7 <aura:attribute name="totalNumberOfRows" type="Integer" default="300"/>
8 <aura:attribute name="loadMoreStatus" type="String" default=""/>
9 <!-- Retrieve your data using an Apex Controller -->
10 <aura:handler name="init" value="{! this }" action="{! c.init }"/>
11 <div style="height: 500px">
12 <lightning:datatable
13 columns="{! v.columns }"
14 data="{! v.data }"
15 keyField="id"
16 enableInfiniteLoading="true"
17 onloadmore="{! c.loadMoreData }"/>
18 </div>
19 {! v.loadMoreStatus }
20</aura:component>onloadmore イベントハンドラは、ユーザがテーブルの最下部までスクロールすると、読み込むデータがなくなるまで追加データを取得します。データの読み込み中にスピナーを表示するには、isLoading 属性を true に設定します。
1({
2 loadMoreData: function (cmp, event, helper) {
3 //Display a spinner to signal that data is being loaded
4 event.getSource().set("v.isLoading", true);
5 //Display "Loading" when more data is being loaded
6 cmp.set('v.loadMoreStatus', 'Loading');
7 helper.fetchData(cmp, cmp.get('v.rowsToLoad'))
8 .then($A.getCallback(function (data) {
9 if (cmp.get('v.data').length >= cmp.get('v.totalNumberOfRows')) {
10 cmp.set('v.enableInfiniteLoading', false);
11 cmp.set('v.loadMoreStatus', 'No more data to load');
12 } else {
13 var currentData = cmp.get('v.data');
14 //Appends new data to the end of the table
15 var newData = currentData.concat(data);
16 cmp.set('v.data', newData);
17 cmp.set('v.loadMoreStatus', '');
18 }
19 event.getSource().set("v.isLoading", false);
20 }));
21 }
22})この例では、合計行数を固定数で示していますが、Apex コントローラ内で SOQL SELECT 構文と COUNT() 関数を使用してオブジェクトの行数を返すこともできます。そしてその結果を、初期化中に totalNumberOfRows 属性に設定します。
1SELECT COUNT(Id) FROM Contactヘッダーレベルのアクションとは、列によって設定される条件を満たす行のみを表示するなど、データの列に対して実行できるタスクを指します。列に対してアクションを実行し、onheaderaction イベントハンドラを使用してそれを処理できます。
ヘッダーアクションでサポートされる属性は次のとおりです。
| 属性 | 説明 |
|---|---|
| label | 必須。アクションに表示される表示ラベル。 |
| name | 必須。選択されたアクションを識別するアクションの名前。 |
| checked | アクションの表示ラベルの左側にチェックマークが表示されるかどうかを指定します。true の場合、チェックマークがメニュー項目の左側に表示されます。false の場合、チェックマークは表示されませんが、チェックマーク用のスペースが表示されます。 |
| disabled | アクションを選択できるかどうかを指定します。true の場合、アクション項目は無効と表示されます。この値のデフォルトは false です。 |
| iconName | アクション項目の右側に表示されるアイコンの名前。 |
たとえば、[Publishing State (公開状態)] 列が [Published (公開)] または [Unpublished (未公開)] のいずれかの状態である行のみを表示する条件を作成するとします。
1<aura:attribute name="rawData" type="Object" description="Stores the currently displayed rows of data"/>
2<aura:attribute name="activeFilter" type="string" default="all" description="The currently selected actions filter"/>
3<lightning:datatable
4 columns="{! v.mycolumns }"
5 data="{! v.mydata }"
6 keyField="id"
7 onheaderaction="{! c.handleHeaderAction }"/>ヘッダーアクションを [アクション] 列プロパティにバインドします。これは初期化中に行うことができます。
1({
2 init: function (cmp, event, helper) {
3 var headerActions = [
4 {
5 label: 'All',
6 checked: true,
7 name:'all'
8 },
9 {
10 label: 'Published',
11 checked: false,
12 name:'show_published'
13 },
14 {
15 label: 'Unpublished',
16 checked: false,
17 name:'show_unpublished'
18 },
19 ];
20 cmp.set('v.mycolumns', [
21 // other column data
22 {
23 label: 'Publishing State',
24 fieldName: 'published',
25 type: 'text',
26 actions: headerActions
27 }
28 ]);
29 },
30 handleHeaderAction: function (cmp, event, helper) {
31 // Retrieves the name of the selected filter
32 var actionName = event.getParam('action').name;
33 // Retrieves the current column definition
34 // based on the selected filter
35 var colDef = event.getParam('columnDefinition');
36 var columns = cmp.get('v.mycolumns');
37 var activeFilter = cmp.get('v.activeFilter');
38 if (actionName !== activeFilter) {
39 var idx = columns.indexOf(colDef);
40 // Update the column definition with the updated actions data
41 var actions = columns[idx].actions;
42 actions.forEach(function (action) {
43 action.checked = action.name === actionName;
44 });
45 cmp.set('v.activeFilter', actionName);
46 helper.updateBooks(cmp);
47 cmp.set('v.mycolumns', columns);
48 }
49 }
50})最後に、選択した条件に一致する行を表示します。これは、helper.updateBooks(cmp) によって実行されます。
1({
2 updateBooks: function (cmp) {
3 var rows = cmp.get('v.rawData');
4 var activeFilter = cmp.get('v.activeFilter');
5 var filteredRows = rows;
6 if (activeFilter !== 'all') {
7 filteredRows = rows.filter(function (row) {
8 return (activeFilter === 'show_published' ||
9 (activeFilter === 'show_unpublished');
10 });
11 }
12 cmp.set('v.mydata', filteredRows);
13 }
14})行レベルのアクションとは、行の更新や削除など、データの行に対して実行できるタスクを指します。静的アクションは、テーブルのすべての行に適用されます。各行に対してアクションを実行し、onrowaction イベントハンドラを使用してそれを処理できます。
ヘッダーアクションでサポートされる属性は次のとおりです。
| 属性 | 説明 |
|---|---|
| label | 必須。アクションに表示される表示ラベル。 |
| name | 必須。選択されたアクションを識別するアクションの名前。 |
| disabled | アクションを選択できるかどうかを指定します。true の場合、アクション項目は無効と表示されます。この値のデフォルトは false です。 |
| iconName | アクション項目の右側に表示されるアイコンの名前。 |
1<lightning:datatable
2 columns="{! v.mycolumns }"
3 data="{! v.mydata }"
4 keyField="id"
5 onrowaction="{! c.handleRowAction }"/>列データに対するアクションのリストを指定する必要があります。これは初期化中に行うことができます。次のクライアント側コントローラでは、アクション列を初期化し、各行に対するアクションを処理します。各行のアクションでは、行の詳細を表示し、アクションがクリックされたときに行を削除します。
1({
2 init: function (cmp, event, helper) {
3 var actions = [
4 { label: 'Show details', name: 'show_details' },
5 { label: 'Delete', name: 'delete' }
6 ];
7 cmp.set('v.mycolumns', [
8 // Other column data here
9 { type: 'action', typeAttributes: { rowActions: actions } }
10 ]);
11 },
12 handleRowAction: function (cmp, event, helper) {
13 var action = event.getParam('action');
14 var row = event.getParam('row');
15 switch (action.name) {
16 case 'show_details':
17 alert('Showing Details: ' + JSON.stringify(row));
18 break;
19 case 'delete':
20 var rows = cmp.get('v.mydata');
21 var rowIndex = rows.indexOf(row);
22 rows.splice(rowIndex, 1);
23 cmp.set('v.mydata', rows);
24 break;
25 }
26})データベース内のレコードを削除するには、delete 操作を含む Apex コントローラを作成します。
1@AuraEnabled
2public static Contact deleteContact(Contact contact) {
3 delete contact;
4 return contact;
5}case 'delete' ブロックのコードはヘルパー関数に移動して、次の記述に置き換えることができます。
1helper.deleteRow(cmp, row);ヘルパーは次のようになります。deleteContact Apex コントローラをコールし、削除するデータの行を渡します。削除が成功すると、コンポーネントのその行が表示から削除されます。
1({
2 deleteRow: function(cmp, row) {
3 var action = cmp.get("c.deleteContact");
4 action.setParams({
5 "contact":row
6 });
7 action.setCallback(this, function(response) {
8 var state = response.getState();
9 if (state === "SUCCESS") {
10 var rows = cmp.get('v.mydata');
11 var rowIndex = rows.indexOf(row);
12 rows.splice(rowIndex, 1);
13 cmp.set('v.mydata', rows);
14 }
15 else if (state === "ERROR") {
16 // handle error
17 }
18 });
19 $A.enqueueAction(action);
20 }
21})また、upsert 操作を含む Apex コントローラを使用することによって、データの行を更新することもできます。または、force:editRecord イベントを起動してレコード編集ページを表示することもできます。レコード編集ページを取引先責任者に関連付けるには、"recordId": row.Id を渡します。
行レベルの動的アクションの作成動的アクションは、各行のコンテンツに基づいて作成されます。ドロップダウンメニューをクリックすると、非同期コールが実行され、特定の行にどのアクションを表示するかが決定されます。どのアクションを表示するかを決定するロジックは、初期化時に作成できます。次の例では、ドロップダウンメニューが有効化されたときにアクションとその表示ラベルが評価されます。[active (有効)] 列に取引先責任者の状況 ([Active (有効)] または [Inactive (無効)]) が表示され、それによって表示されるアクション ([Deactivate (無効化)] または [Activate (有効化)]) が決まるとします。
1({
2 init: function (cmp, event, helper) {
3 var actions = helper.getRowActions.bind(this, cmp);
4 cmp.set('v.mycolumns', [
5 // Other column data here
6 { label: 'State', fieldName: 'active', type: 'text' },
7 { type: 'action', typeAttributes: { rowActions: actions } }
8 ]);
9 // Fetch or set your data
10 },
11 handleRowAction: function (cmp, event, helper) {
12 var action = event.getParam('action');
13 var row = event.getParam('row');
14 switch (action.name) {
15 case 'activate':
16 helper.activateContact(cmp, row)
17 break;
18 case 'deactivate':
19 helper.deactivateContact(cmp, row)
20 break;
21 }
22 }
23})ヘルパーはどの表示ラベル ([Activate (有効化)] または [Deactivate (無効化)]) を表示するかを評価し、[active (有効)] 列を適切な値に更新します。
1({
2 getRowActions: function (cmp, row, doneCallback) {
3 var actions = [];
4 if (row['isActive']) {
5 actions.push({
6 'label': 'Deactivate',
7 'iconName': 'utility:block_visitor',
8 'name': 'deactivate'
9 });
10 } else {
11 actions.push({
12 'label': 'Activate',
13 'iconName': 'utility:adduser',
14 'name': 'activate'
15 });
16 }
17 // simulate a trip to the server
18 setTimeout($A.getCallback(function () {
19 doneCallback(actions);
20 }), 200);
21 },
22 activateContact: function (cmp, row) {
23 var rows = cmp.get('v.data');
24 var rowIndex = rows.indexOf(row);
25 rows[rowIndex]['isActive'] = true;
26 rows[rowIndex]['active'] = 'Active';
27 cmp.set('v.data', rows);
28 },
29 deactivateContact: function (cmp, row) {
30 var rows = cmp.get('v.data');
31 var rowIndex = rows.indexOf(row);
32 rows[rowIndex]['isActive'] = false;
33 rows[rowIndex]['active'] = 'Inactive';
34 cmp.set('v.data', rows);
35 }
36})前の例では、クライアント側のみで動的アクションを作成して処理する方法を説明しました。サーバーコールを行い、Apex コントローラを使用してレコードデータの変更を保持することもできます。
テーブルと列のサイズ変更
データテーブルの幅と高さは、コンテナ要素によって決まります。表示対象の行がさらにある場合は、テーブルボディにスクローラが追加されます。たとえば、コンテナ要素に CSS スタイル設定を適用して、高さを 300px に制限できます。
1<div style="height: 300px;">
2 <!-- lightning:datatable goes here -->
3</div>デフォルトでは、列はサイズ変更できます。ユーザは、デフォルト値が変更されていない限り、最小 50px および最大 1000px の幅にクリックおよびドラッグできます。列はデフォルトでサイズ変更できます。列のサイズ変更を無効にする場合は、resizeColumnDisabled を true に設定します。最小および最大列幅を変更するには、minColumnWidth および maxColumnWidth 属性を使用します。
プログラムによる行の選択selectedRows 属性を使用するとプログラムによって行を選択することができます。これは、事前に行を選択する場合に便利です。
1<aura:component>
2 <!-- Attributes and init handler here -->
3 <lightning:datatable
4 columns="{! v.columns }"
5 data="{! v.data }"
6 keyField="id"
7 selectedRows="{! v.selectedRows }" />
8 <lightning:button label="Select" onclick="{!c.handleSelect}"/>
9</aura:component>プログラムによって行を選択するには、keyField 値を渡します。
1({
2 // Load data via init handler first
3 // then handle programmatic selection
4 handleSelect: function (cmp, event, helper) {
5 var rows = ['a'];
6 cmp.set('v.selectedRows', rows);
7 }
8})maxRowSelection が選択された行数よりも小さい値に設定されている場合は、指定数の行のみが選択されます。たとえば、maxRowSelection を 2 に設定して、selectedRows に ['a', 'b', 'c'] を渡すと、行 a および b のみが選択されます。
列によるデータの並び替え
列表示ラベルを使用して行データを並べ替えられるようにするには、並べ替えを有効にする列の sortable を true に設定します。sortedBy を列の fieldName プロパティに一致するように設定します。defaultSortDirection を変更しない限り、列ヘッダーをクリックすると列は昇順で並べ替えられます。続けてクリックすると、降順になります。onsort イベントハンドラを処理して、新しい列インデックスと並び替えの方向でテーブルを更新します。
onsort イベントハンドラによってコールされるクライアント側���ントローラの例を次に示します。
1({
2 // Client-side controller called by the onsort event handler
3 updateColumnSorting: function (cmp, event, helper) {
4 var fieldName = event.getParam('fieldName');
5 var sortDirection = event.getParam('sortDirection');
6 // assign the latest attribute with the sorted column fieldName and sorted direction
7 cmp.set("v.sortedBy", fieldName);
8 cmp.set("v.sortedDirection", sortDirection);
9 helper.sortData(cmp, fieldName, sortDirection);
10 }
11 })ヘルパー関数は次のとおりです。
1({
2 sortData: function (cmp, fieldName, sortDirection) {
3 var data = cmp.get("v.data");
4 var reverse = sortDirection !== 'asc';
5 //sorts the rows based on the column header that's clicked
6 data.sort(this.sortBy(fieldName, reverse))
7 cmp.set("v.data", data);
8 },
9 sortBy: function (field, reverse, primer) {
10 var key = primer ?
11 function(x) {return primer(x[field])} :
12 function(x) {return x[field]};
13 //checks if the two rows should switch places
14 reverse = !reverse ? 1 : -1;
15 return function (a, b) {
16 return a = key(a), b = key(b), reverse * ((a > b) - (b > a));
17 }
18 }
19})列内のテキストを折り返しまたはクリップすることができます。これにより、行を拡張してより多くのコンテンツを表示するか、コンテンツを切り捨てて列内の 1 行に収めることができます。
この 2 つのビューを切り替えるには、列ヘッダーのドロップダウンメニューから [テキストを折り返し] または [テキストをクリップ] を選択します。
デフォルトでは、コンテンツの文字数が列幅で表示できる文字数を超える場合、コンテンツはクリップされます。テキストの折り返しは、次のデータ型でのみサポートされます。
- currency
- date
- location
- number
- percent
- phone
- text
- url
アクセシビリティ
データテーブルは、キーボードを使用して、ナビゲーションモードとアクションモードで使用できます。ナビゲーションモードを開始するには、Tab キーを押してデータテーブルに切り替えます。テーブルボディの最初のデータセルがフォーカスされます。矢印キーを使用して、テーブルを移動します。
アクションモードを開始するには、Enter キー���たはスペースバーを押します。アクションモードでは、列をサイズ変更できます。列のサイズを変更するには、上矢印キーを押してヘッダーに移動します。次に、Tab キーを押して列の仕切りを有効化して、左右矢印を使用して列をサイズ変更します。列のサイズ変更を終了してナビゲーションモードに戻るには、Tab キーを押します。
リンクを含むセルにフォーカスがあるときに Enter キーを押してリンクに移動することは、現在サポートされていません。この制限は、url、phone、email 型のデータを含むセルに適用されます。
メソッド
このコンポーネントは、次のメソッドをサポートします。
getSelectedRows(): 各選択行のデータの配列を返します。
属性
| 属性名 | 属性型 | 説明 | 必須項目 |
|---|---|---|---|
| body | Component[] | コンポーネントのボディ。マークアップでは、これはタグのボディに含まれるすべてを指します。 | |
| class | String | コンポーネントの基本クラスに加え、外部要素の CSS クラス。 | |
| columns | List | データ型を定義するために使用される列オブジェクトの配列。必須プロパティには、「label」、「dataKey」、「type」があります。デフォルトの型は「text」です。 | |
| data | Object | 表示するデータの配列。 | |
| defaultSortDirection | String | 並び替えなしの列のデフォルトの並び替えの方向を指定します。有効なオプションには、「asc」および「desc」が含まれます。デフォルトでは、昇順の「asc」です。 | |
| enableInfiniteLoading | Boolean | 無限読み込みを有効または無効にします。デフォルトは false です。 | |
| hideCheckboxColumn | Boolean | 行選択のチェックボックス列の非表示または表示。チェックボックス列を非表示にするには、hideCheckboxColumn を true に設定します。デフォルトは false です。 | |
| isLoading | Boolean | さらに多くのデータを読み込みむかどうかを指定し、読み込む場合はスピナーを表示します。デフォルトは false です。 | |
| keyField | String | パフォーマンス向上のために必須。各行を一意の ID に関連付けます。 | はい |
| loadMoreOffset | Integer | テーブルの最下部からテーブルのスクロール位置までのピクセル数に基づいて、無限読み込みをトリガするタイミングを決定します。デフォルト値は 20 です。 | |
| maxColumnWidth | Integer | すべての列の最大幅。デフォルト値は 1000px です。 | |
| maxRowSelection | Integer | 選択可能な行の最大数。デフォルトでは、チェックボックスを使用して選択します。maxRowSelection が 1 の場合はラジオボタンを使用します。 | |
| minColumnWidth | Integer | すべての列の最小幅。デフォルト値は 50px です。 | |
| onheaderaction | Action | ヘッダーアクションがクリックされたときにトリガされるアクション。デフォルトでは、ヘッダーアクションメニューも閉じられます。 | |
| onloadmore | Action | 無限読み込みでさらに多くのデータを読み込むときにトリガされるアクション。 | |
| onresize | Action | テーブルに列が最初に表示されるときと特定の列がサイズ変更されるたびにトリガされるアクション。 | |
| onrowaction | Action | 行アクションがクリックされたときにトリガされるアクション。デフォルトでは、行アクションメニューも閉じられます。 | |
| onrowselection | Action | 行が選択されたときにトリガされるアクション。 | |
| onsort | Action | 列が並び替えられたときにトリガされるアクション。 | |
| resizeColumnDisabled | Boolean | 列のサイズ変更を無効にするかどうかを指定します。デフォルトは false です。 | |
| resizeStep | Integer | ユーザが左または右矢印を押したときの列サイズ変更幅。デフォルト値は 10px です。 | |
| rowNumberOffset | Integer | 行数のカウントをどの場所から開始するかを決定します。デフォルト値は 0 です。 | |
| selectedRows | List | keyField 値のリストを使用した、プログラムによる行の選択を有効にします。 | |
| showRowNumberColumn | Boolean | 行数列を表示または非表示にします。行数列を表示するには true に設定します。デフォルトは false です。 | |
| sortedBy | String | 並び順を制御する列 fieldName。onsort イベントハンドラを使用してデータを並び替えます。 | |
| sortedDirection | String | 並び替え順を指定します。onsort イベントハンドラを使用してデータを並び替えます。有効なオプションには、「asc」および「desc」が含まれます。 | |
| title | String | マウスポインタが要素に重ねられたときにツールチップテキストを表示します。 |