Vue + 要素の動的複数ヘッダーと動的スロット

Vue + 要素の動的複数ヘッダーと動的スロット

1. 需要

ユーザーが自分でテーブルを構成できるようになり、システム コードのメンテナンスの量が削減されます。

2. 効果

ヘッダーjson:

注:スコープ (フィールド名は別のものでも可) は、この列のスロットを有効にするかどうかです。複数レベルのヘッダーを含む propChildren があります。

   
テーブルヘッド: [{
    キー: '1'、
    ラベル: '日付'、
    プロパティ: '日付'、
    幅: '100',
    ヘッダー配置: 'center'、
    配置: '中央'、
    スコープ: false、
    ソート可能: true
  },
  {
    キー: '2'、
    ラベル: '名前',
    プロパティ: '名前',
    幅: '100',
    ヘッダー配置: 'center'、
    配置: '中央'、
    スコープ: false、
    ソート可能: false
  },
  {
    キー: '3'、
    ラベル: '分析'、
    プロパティ: '分析'、
    幅: '100',
    ヘッダー配置: 'center'、
    プロパティChildren: [{
      キー: '31'、
      ラベル: 「前年比」、
      プロパティ: 'TB'、
      幅: '100',
      ヘッダー配置: 'center'、
      配置: '中央'、
      スコープ: true、
      ソート可能: true
    },
    {
      キー: '32'、
      ラベル: 「月別」、
      プロップ: 'HB',
      幅: '100',
      ヘッダー配置: 'center'、
      配置: '中央'、
      スコープ: true、
      ソート可能: true
    },]
  },
  {
    キー: '4'、
    ラベル: '金額',
    プロパティ: '価格'、
    幅: '100',
    ヘッダー配置: 'center'、
    配置: '右'、
    スコープ: false、
    ソート可能: true
  },
  {
    キー: '5'、
    ラベル: '住所'、
    プロパティ: 'アドレス',
    幅: ''、
    ヘッダー配置: '左'、
    配置: '左'、
    スコープ: false、
    ソート可能: false
  }
  ]、

3. すべてのコード

<テンプレート>
  <el-テーブル
    :data="テーブルデータ"
    ストライプ
    サイズ変更可能
    国境
    高さ="300"
    スタイル="幅: 1000px"
  >
    <el-テーブル列
      タイプ="インデックス"
      :index="インデックスメソッド"
      label="シリアル番号"
      align="center"
      幅= "60"
    >
    </el-table-column>
    <el-テーブル列
      v-for="(item, index) in tableHead"
      :key="インデックス"
      :prop="アイテム.prop"
      :label="アイテム.ラベル"
      :width="アイテムの幅"
      :align="アイテム.align"
      :headerAlign="item.headerAlign"
      :sortable="アイテム.sortable"
      オーバーフローツールチップを表示
    >
      <el-テーブル列
        v-for="(item, index) in item.propChildren"
        :key="インデックス"
        :prop="アイテム.prop"
        :label="アイテム.ラベル"
        :width="アイテムの幅"
        :align="アイテム.align"
        :headerAlign="item.headerAlign"
        :sortable="アイテム.sortable"
        オーバーフローツールチップを表示
      >
        <テンプレート スロット スコープ="スコープ">
          <div v-if="item.scope === true">
            <div v-if="scope.row[item.prop] == ''">
              {{ スコープ.行[項目.プロパティ] }}
            </div>
            <div v-else-if="scope.row[item.prop] > '0'" スタイル="color: green">
              {{scope.row[item.prop] }}%<i class="el-icon-caret-top"></i>
            </div>
            <div v-else-if="scope.row[item.prop] < '0'" スタイル="color: red">
              {{scope.row[item.prop] }}%<i class="el-icon-caret-bottom"></i>
            </div>
          </div>
          <div v-else-if="scope.row[item.prop] < '0'" スタイル="color: red">
            {{ スコープ.行[項目.プロパティ] }}
          </div>
          <div v-else>{{ スコープ.行[item.prop] }}</div>
        </テンプレート>
      </el-table-column>
      <テンプレート スロット スコープ="スコープ">
          <div v-if="item.scope === true">
            <div v-if="scope.row[item.prop] == ''">
              {{ スコープ.行[項目.プロパティ] }}
            </div>
            <div v-else-if="scope.row[item.prop] < '0'" スタイル="color: red">
              {{ スコープ.行[項目.プロパティ] }}
            </div>
             <div v-else-if="scope.row[item.prop] > '0'">
              {{ スコープ.行[項目.プロパティ] }}
            </div>
          </div>
        <div v-else>{{ スコープ.行[item.prop] }}</div>
        </テンプレート>
    </el-table-column>
  </el-table>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      // 単一のヘッダーがこの列のデータを比較するかどうかは、スコープによって異なります。
      テーブルヘッド: [{
        キー: '1'、
        ラベル: '日付'、
        プロパティ: '日付'、
        幅: '100',
        ヘッダー配置: 'center'、
        配置: '中央'、
        スコープ: false、
        ソート可能: true
      },
      {
        キー: '2'、
        ラベル: '名前',
        プロパティ: '名前',
        幅: '100',
        ヘッダー配置: 'center'、
        配置: '中央'、
        スコープ: false、
        ソート可能: false
      },
      {
        キー: '3'、
        ラベル: '分析'、
        プロパティ: '分析'、
        幅: '100',
        ヘッダー配置: 'center'、
        プロパティChildren: [{
          キー: '31'、
          ラベル: 「前年比」、
          プロパティ: 'TB'、
          幅: '100',
          ヘッダー配置: 'center'、
          配置: '中央'、
          スコープ: true、
          ソート可能: true
        },
        {
          キー: '32'、
          ラベル: 「月別」、
          プロップ: 'HB',
          幅: '100',
          ヘッダー配置: 'center'、
          配置: '中央'、
          スコープ: true、
          ソート可能: true
        },]
      },
      {
        キー: '4'、
        ラベル: '金額',
        プロパティ: '価格'、
        幅: '100',
        ヘッダー配置: 'center'、
        配置: '右'、
        スコープ: false、
        ソート可能: true
      },
      {
        キー: '5'、
        ラベル: '住所'、
        プロパティ: 'アドレス',
        幅: ''、
        ヘッダー配置: '左'、
        配置: '左'、
        スコープ: false、
        ソート可能: false
      }
      ]、

      // データテーブルData: [{
        日付: '2016-05-02'、
        名前: 王小湖、
        HB: '-1.1'、
        TB: '2.5'、
        価格: '2982.01',
        住所: 上海市普陀区金沙江路1518号、...
      }, {
        日付: '2016-05-04'、
        名前: 王小湖、
        HB: '-0.28',
        TB: '1.1'、
        価格: '2982.01',
        住所: '上海市普陀区金沙江路1517号'
      }, {
        日付: '2016-05-01'、
        名前: 王小湖、
        HB: '28'、
        TB: '-0.11'、
        価格: '2982.01',
        住所: '上海市普陀区金沙江路1519号'
      }, {
        日付: '2016-05-03'、
        名前: '張三'、
        HB: '21'、
        TB: '2.11'、
        価格: '-201.02',
        住所: '上海市普陀区金沙江路1516号'
      }, {
        日付: '2016-05-11'、
        名前: '張三'、
        HB: '0.28'、
        TB: '-1.1'、
        価格: '2982.01',
        住所: '上海市普陀区金沙江路1516号'
      }, {
        日付: '2016-05-02'、
        名前: 王小湖、
        HB: '-0.18'、
        TB: '-1.15'、
        価格: '2982.01',
        住所: 上海市普陀区金沙江路1518号、...
      }, {
        日付: '2016-05-04'、
        名前: 王小湖、
        HB: '-1.01'、
        TB: '1.1'、
        価格: '2982.01',
        住所: '上海市普陀区金沙江路1517号'
      }, {
        日付: '2016-05-01'、
        名前: 王小湖、
        HB: '-28'、
        TB: '2.11'、
        価格: '2982.01',
        住所: '上海市普陀区金沙江路1519号'
      }, {
        日付: '2016-05-03'、
        名前: '張三'、
        HB: ''、
        TB: '0.1'、
        価格: '-200.01',
        住所: '上海市普陀区金沙江路1516号'
      }, {
        日付: '2016-05-11'、
        名前: '張三'、
        HB: '18'、
        TB: '-0.81',
        価格: '2982.01',
        住所: '上海市普陀区金沙江路1516号'
      }],
    }
  },
  メソッド: {
    インデックスメソッド(インデックス) {
      インデックス + 1 を返します。
    }
  }
}
</スクリプト>

これで、vue + element dynamic multiple headers と dynamic slots に関するこの記事は終了です。vue + element dynamic multiple headers と dynamic slots に関するその他の関連記事については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の要素カレンダー コンポーネントを使用したサンプル コード
  • vue+element-ui テーブルカプセル化タグラベルスロットの使用

<<:  Linuxネットワーク設定の基本操作コマンドを詳しく解説

>>:  MySQL マスタースレーブレプリケーションの実装手順

推薦する

ブラウザでのjsのイベントループイベントキューの詳細な説明

目次序文スタックと2つのキューを理解する実行プロセス簡単な例より難しい例要約する序文以下の内容はブラ...

LinuxにKafkaをインストールする

目次1.1 前提条件としてのJava環境1.2 Zookeeperのインストールと設定1.3 Kaf...

携帯電話に GreasyFork js スクリプトをインストールするチュートリアル

目次序文1. Iceraven ブラウザ (Firefox) (Android) 2. (アンドロイ...

HTML テーブル タグ チュートリアル (34): 行スパン属性 ROWSPAN

複雑なテーブル構造では、一部のセルが水平方向に複数のセルにまたがるため、行間属性 ROWSPAN を...

Linux の文字端末でマウスを使って赤い四角形を移動する方法

すべてがファイルです! UNIX はすでにそれを言っています。エリック・レイモンドはこう言いました。...

CSS3 は下部に固定されたフッターを実装します (ページの高さに関係なく常に下部にあります)

序文フッター領域を下部に固定します。ページの高さや幅に関係なく、モバイル メニューと同様に、フッター...

Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順

1. はじめに以前のプログラム アーキテクチャは次の形式になります。プログラムのサイズが大きくなると...

ウェブサイトの再設計はどの家族にとっても難しい作業です

<br />どの家庭にもそれぞれの問題があり、改訂はどの IT 企業にとっても問題の 1...

Linux (Centos7) に mysql8.0.18 をインストールするチュートリアル図

1 インストールリソースパッケージmysql-8.0.18-1.el7.x86_64.rpm-bun...

MySQL における tinyint と int の違いの詳細な説明

質問: int(1) と tinyint(1) の違いは何ですか?このような設計では、いずれにしても...

Centos6.5 の rpm パッケージから mysql5.7 をインストールするときに発生する初期化エラーの解決策

1. rzをサーバーにアップロードして解凍する rz [root@mini2 アップロード]# ta...

MySQL データ操作 - DML ステートメントの使用

例示するDML(データ操作言語)とは、データベースの追加、削除、変更を行うための操作命令のことです。...

MySQL MyISAM と InnoDB の違い

違い: 1. InnoDB はトランザクションをサポートしていますが、MyISAM はサポートしてい...

PHP 開発環境の構築に関する win10 docker-toolsbox チュートリアル

画像をダウンロード docker プル mysql:5.7 docker pull php:7.2-...

HTML5+CSS3コーディング標準

黄金律プロジェクトに何人の人が取り組んでいるかに関係なく、すべてのコード行が同じ人によって書かれたよ...