[메모] Vue.js에서ag-grid 사용하기

11622 단어 ag-gridVue.js

참고 자료

  • 공식 홈페이지:https://www.ag-grid.com/vuejs-grid/
  • ag-grid 사용 방법

  • [메모] Vue.js에서ag-grid 사용하기 (설정 값 제외) ※ 이 기사의 후속입니다
  • 준비

  • 어느 화면에서 격자를 만드는지 고려한다
  • 어떤 격자를 만들고 싶은지(몇 줄 몇 열, 각 열에 무엇이 표시되는지, 가로폭 등)를 고려한다
  • ag-grid-community,ag-grid-vue를 설치합니다
  • package.제이슨은 이렇다(2020.5시)
  • "dependencies": {
        "ag-grid-community": "^21.2.2",
        "ag-grid-vue": "^21.2.2",
     ...
        "vue": "^2.6.10",
     ...
    

    .vue 파일로 하는 일

  • script에서importag-grid-vue
  •  import {AgGridVue} from "ag-grid-vue";
    
  • 구성 요소를 등록합니다
  • export default {
      components: {
        AgGridVue,
      }
    
  • template에서 이 격자의 구성 요소 이름으로 라벨을 만듭니다
  • <template>
      <div>
          <AgGridVue id="grid" class="ag-theme-blue" 
              :rowData="rowData"
              :gridOptions="gridOptions">
          </AgGridVue>
      </div>
    </template>
    
  • 태그 속성 값의 시작 부분에 콜론(:)을 붙인 것은 Vue입니다.js의 v-bind 명령의 생략 기호입니다.즉, 이렇게 쓴 뜻과 같다
  • <template>
      <div>
          <AgGridVue id="grid" class="ag-theme-blue" 
              v-bind:rowData="rowData"
              v-bind:gridOptions="gridOptions">
          </AgGridVue>
      </div>
    </template>
    
  • "rowData"와 "gridOptions"는 이것입니다.vue의 데이터 (),props,computed는 모두 이 값을 가지고 있습니다.이번 예는 이렇다
  •   data() {
        ...
        return {
          gridData : [],
          gridOptions: { ... }
        }
      },
      computed: {
        rowData () {
          return this.gridData;
        }
      },
    
  • 여기서rowData는 속성을 계산하는 데 깊은 의미가 없습니다.나는 데이터 중의gridData를 격자에 직접 전달할 수 있다고 생각한다
  • gridOptions라는 데이터에 설정된 내용은 격자의 모양과 동작을 결정하는 설정이다
  • 이번 grid Options는 이런 느낌이다
  •       gridOptions: {
            // 列の定義
            columnDefs:colDefs,
    
            // 1行選択モード
            rowSelection: 'single', 
    
            // 1行の高さ(タグ属性でも指定できるが、今回はオプションにした)
            rowHeight : 32, 
    
            // ページング機能を有効にするかの設定。タグ属性では指定できない模様
            pagination: true, 
            paginationAutoPageSize : true,
    
            // EVENTS - add event callback handlers
            // 行が選択されたイベント
            onRowSelected(params) { 
              params.api.redrawRows(); // 選択されたとき行の色を変える
            },
            // 行のスタイルを返すコールバック
            getRowStyle(params) {
              // 選択行のスタイル
              if (params.node.selected) {
                return { background: 'white' };
              } else { // 通常行のスタイル
                return { background: '#f1e8e8' };
              }
            },
            // グリッドの準備完了イベント
            onGridReady(params) {
              this.gridApi = params.api;
              this.columnApi = params.columnApi;
    
              // カラム幅を全体幅に合わせる.
              // これを呼ばないとcolumnDefが反映されません。
              this.gridApi.sizeColumnsToFit(); 
    
              console.log('gridReady is called.'); 
            },
          },
    
  • 열의 정의는colDefs입니다. 이런 느낌입니다
  •     const colDefs = [{
            headerName: '#', 
            field: 'order', 
            maxWidth:50, 
            cellStyle: {textAlign: 'center'}
          },{
            headerName: '商品番号', 
            field: 'productCd', 
            maxWidth: 85,
            cellStyle: {textAlign: 'left'}
          },{
            headerName: '商品名称', 
            field: 'name', 
            cellStyle: {textAlign: 'left'}
          }];
    
  • 여기에는 #, 상품 번호, 상품 이름 3열이 열 머리글로 표시됩니다
  • field는 rowData에 전달된 대상 그룹의 모든 요소의 속성 이름과 일치해야 합니다.즉, rowData[i]입니다.order 또는 rowData[i].productCd 등에서 유지되는 값은 격자 행의 해당 열에 표시됩니다
  • maxWidth는 이 열의 값이 긴 문자열일 때 열이 최대 몇 개까지 확장되는지를 가리킨다.1열의 #이면 50pixel까지 확장할 수 있습니다.마찬가지로 minWidth 속성도 설정할 수 있습니다
  • 열의 수량은columnDefs 설정에 의해 결정되지만, 줄의 수량은rowData에 전달된 대상 그룹의 요소 수량에 의해 결정됩니다
  • 실제 표시


    이런 느낌이에요.

    주의: 제목 부분의 텍스트가 센터로 정렬되어도 제목 텍스트가 중간에 있지 않습니다.

  • Unable to Change the Alignment of the Header Text for the Columns in the Grid to Center in Ag-grid v13.0.0 (Bug)
  • flex:1; 중요한 것 같습니다
  •   .ag-header-cell-text {
        flex: 1; /* ヘッダのテキストの位置を変更するにはこれが超重要らしい */
      }
    

    좋은 웹페이지 즐겨찾기