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 マスタースレーブレプリケーションの実装手順

推薦する

プログレッシブ ウェブ アプリ (PWA) の開発方法

目次概要必要とするアプリURL PWA にはどのような技術コンポーネントが必要ですか?マニフェストフ...

JavaScript クリップボードの使用法の詳細な説明

(1)はじめに: clipboard.js は、テキストをクリップボードにコピーする機能を実装する軽...

JS が WeChat の「クソ爆弾」機能を実装

みなさんこんにちは、Qiufengです。最近、WeChatは新しい機能をリリースしました(WeCha...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...

vue WatchとComputedの使用の概要

目次01. リスナーウォッチ(1)機能(2)特性と方法(3)監視対象(4)リスニングアレイ02. 計...

MySQLインデックスを正しく作成する方法

インデックス作成は大学図書館の書誌インデックスの構築に似ており、データ検索の効率を向上させ、データベ...

JavaScript を使用してテーブル情報を追加および削除する

JavaScript 入門JavaScript は軽量なインタープリタ型の Web 開発言語です。言...

新しい ECMAscript オブジェクト機能の紹介

目次1. オブジェクトのプロパティ1.1 属性表記2. プロパティ名を計算する3.オブジェクトメソッ...

MySQL マスタースレーブステータスチェックの実装

1. AデータベースとBデータベースの同期ステータスを確認する次のコマンドを入力すると多くの情報が表...

HTML+CSS ボックスモデルの例 (円、半円など) 「border-radius」はシンプルで使いやすい

多くの友人は、フロントエンドを学習するときに、ボックス モデルがデフォルトで正方形であることに気付き...

MySQLインデックスを最適化する方法

1. MySQL のインデックスの使用方法インデックスは、特定の列の値を持つ行をすばやく見つけるため...

Vue.jsクラウドストレージで画像アップロード機能を実現

序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...

SQL で行の最大値または最小値を取得する方法

元データと対象データSQL文を実装する(最大) 選択 店、 月、 最大(dz,fz,sp) が最大値...

Ubuntu 18.04 LTSでIPアドレスを設定するための完全な手順

序文Ubuntu 18.04 LTS で IP アドレスを設定する方法は、これまで使用されていた設定...

Vue/React シングルページ アプリケーションをリフレッシュなしで復元するソリューション

目次導入なぜわざわざ?落とし穴のあるコミュニティソリューション(Vue を例に挙げる)現時点では良い...