ホームページ ウェブフロントエンド jsチュートリアル element-ui の VUE の ElTableColumn 拡張機能の詳細な説明

element-ui の VUE の ElTableColumn 拡張機能の詳細な説明

May 28, 2018 pm 03:49 PM
element-ui 拡大する

この記事では主に、Element-ui における VUE の ElTableColumn 拡張機能の詳細な説明を紹介し、参考として提供します。

会社には新しい要件があります。ElTableColumn の先頭をクリックして検索します。私の同僚はすでにこの関数を作成していますが、これをコンポーネントにカプセル化し、それについて学ぶ予定です。

ElTableColumn はもともと次のようになっていました:


やりたいことは次のようなものです:


コードを直接入れただけなので、いちいち説明するのは多すぎます。

コードの構造:


コンポーネント

<!-- ElTableColumnPro.vue -->
<template>
   <el-table-column v-if="visible" :formatter="formatter" :align='align' :prop="prop" :header-align="headerAlign" :label="label" :width="width" :render-header="renderHeader" >
     <template slot-scope="scope">
      <slot :row="scope.row" :$index="scope.$index" >
       <span>{{fomatMethod(scope.row[prop])}}</span>
      </slot>
     </template>
   </el-table-column>
</template>

<script>
import moment from "moment";

export default {
 name: "el-table-column-pro",
 props: {
  prop: {
   type: String
  },
  label: {
   type: String
  },
  width: {
   type: Number
  },
  renderType: {
   type: String,
   validator: value => ["date", "input", "select"].includes(value)
  },
  placeholder: {
   type: String
  },
  rederWidth: {
   type: String,
   default: "230px"
  },
  param: {
   type: String,
   default: ""
  },
  startDate: {
   type: String
  },
  endDate: {
   type: String
  },
  selectList: {
   type: Array
  },
  isClear: {
   type: Boolean,
   default:true
  },
  visible: {
   type: Boolean,
   default: true
  },
  filterIcon: {
   type: String,
   default: "el-icon-search"
  },
  callback: {
   type: Function
  },
  formatter: {
   type: Function,
   default:(row, column, cellValue)=>cellValue
  },
  align:{
   type:String 
  },
  headerAlign:{
   type:String
  }
 },
 data() {
  return {
   formatD:this.filterIcon
  };
 },
 
 methods: {

  fomatMethod(value){
   return this.formatter('','',value)
  },
  
  renderHeader(createElement, { column, $index }) {
   switch (this.renderType) {
    case "date":
     return this.renderDate(createElement, { column, $index });

    case "input":
     return this.rederInput(createElement, { column, $index });
     
    case "select":
     return this.rederSelect(createElement, { column, $index });
    
    default:
     return column.label;
   }
  },

  rederInput(createElement, { column, $index }) {
   return createElement(
    "p",
    {
     class: "filters",
     style: {
      color: column.color
     }
    },
    [
     createElement(
      "el-popover",
      {
       props: {
        placement: "bottom",
        width: "200",
        trigger: "click"
       }
      },
      [
       createElement("el-input", {
        props: {
         placeholder: this.placeholder,
         value: this.param
        },
        nativeOn: {
         keyup: event => {
          if (event.keyCode === 13) {
           this.$emit("update:param", event.target.value);
           this.callback && this.callback();
          }
         }
        },
        on: {
         blur: event => {
          this.$emit("update:param", event.target.value);
          this.callback && this.callback();
         }
        }
       }),
       createElement(
        "span",
        {
         slot: "reference"
        },
        [
         column.label,
         createElement("i", {
          class: this.filterIcon,
          style: {
           marginLeft: "4px"
          }
         })
        ]
       )
      ]
     )
    ]
   );
  },

  rederSelect(createElement, { column, $index }) {
   return createElement(
    "p",
    {
     class: "filters",
     style: {
      color: column.color
     }
    },
    [
     createElement(
      "el-popover",
      {
       props: {
        placement: "bottom",
        width: "200",
        trigger: "click"
       }
      },
      [
       createElement(
        "el-select",
        {
         props: {
          placeholder: this.placeholder,
          value: this.param,
          clearable: this.isClear
         },
         on: {
          input: value => {
           this.$emit("update:param", value);
           this.callback && this.callback();
          }
         }
        },
        [
         this.selectList.map(item => {
          return createElement("el-option", {
           props: {
            value: item.value,
            label: item.label
           }
          });
         })
        ]
       ),
       createElement(
        "span",
        {
         slot: "reference"
        },
        [
         column.label,
         createElement("i", {
          class: this.filterIcon,
          style: {
           marginLeft: "4px"
          }
         })
        ]
       )
      ]
     )
    ]
   );
  },

  renderDate(createElement, { column, $index }) {
   return createElement(
    "p",
    {
     class: "filters"
    },
    [
     createElement(
      "el-popover",
      {
       props: {
        placement: "bottom",
        width: this.rederWidth,
        trigger: "click"
       }
      },
      [
       createElement("el-date-picker", {
        props: {
         placeholder: this.placeholder,
         value: this.value,
         type: "daterange",
         rangeSeparator:"至",
         startPlaceholder:"开始日期",
         endPlaceholder:"结束日期",
        },
        style: {
         width: this.rederWidth
        },
        on: {
         input: value => {
          if (value) {
           const startDate = moment(value[0]).format("YYYY-MM-DD");
           const endDate = moment(value[1]).format("YYYY-MM-DD");
           this.$emit("update:startDate", startDate);
           this.$emit("update:endDate", endDate);
           this.callback && this.callback();
          }
         }
        }
       }),
       createElement(
        "span",
        {
         slot: "reference"
        },
        [
         column.label,
         createElement("i", {
          class: this.filterIcon,
          style: {
           marginLeft: "4px"
          }
         })
        ]
       )
      ]
     )
    ]
   );
  }
 }
};
</script>
<!-- index.js -->
import ElTableColumnPro from './ElTableColumnPro'
ElTableColumnPro.install = function(Vue) {
 Vue.component(ElTableColumnPro.name, ElTableColumnPro);
};
export default ElTableColumnPro;
ログイン後にコピー

インストール

import ElTableColumnPro from 'components/ElTableColumnPro/index' 
...
...
...

Vue.use(ElTableColumnPro)
ログイン後にコピー

使用方法

 <el-table :data="bankFlow" style="width:100%" stripe>
    <el-table-column-pro :visible="showMore" prop="transactionId" label="流水号" :width="120"> </el-table-column-pro>
    <el-table-column-pro prop="clientCode" label="客户代码 " :width="120" placeholder="请输入客户代码" :callback="requestTransactionLogs" renderType="input" :param.sync="request_params.clientCode"> </el-table-column-pro>
    <el-table-column-pro prop="eventTypeName" label="事件 " placeholder="请选择事件"  :selectList="listEventEnum" :callback="requestTransactionLogs" renderType="select" :param.sync="request_params.event" :width="100"> </el-table-column-pro>
    <el-table-column-pro prop="createTime" :callback="requestTransactionLogs" :startDate.sync="request_params.startDate" :endDate.sync="request_params.endDate" :formatter="$timeformat" label="时间" renderType="date" :width="180" ></el-table-column-pro>
 </el-table>
ログイン後にコピー

 <el-table :data="lists.content" v-loading="loading" @row-dblclick="detail" >
    <el-table-column-pro :width="120" prop="clientCode" label="客户代码 " align="center" header-align="center" placeholder="请输入客户代码" :callback="getLists" renderType="input" :param.sync="params.clientCode"></el-table-column-pro>      
    <el-table-column-pro label="内容 " placeholder="请输入内容" :callback="getLists" renderType="input" :param.sync="params.content">
        <template slot-scope="scope">
           <pre>{{scope.row.content}}</pre>
        </template>
    </el-table-column-pro>
    <el-table-column-pro prop="userName" :width="100" label="记录人 " align="center" header-align="center" placeholder="请输入记录人" :callback="getLists" renderType="input" :param.sync="params.userName"></el-table-column-pro>
    <el-table-column prop="createTime" width="150" label="记录时间" align="center" header-align="center" :formatter="$dateTimeFormat"></el-table-column>
 </el-table>
ログイン後にコピー

上記はまとめてみました 皆さん、今後も皆様のお役に立てれば幸いです。

関連記事:

戻り値に pre タグを自動的に追加する Ajax ソリューション

異なる名前空間のアクションを使用する ajax メソッド

Ajax を使用してリンクをプレビューすると、そのコンテンツを確認できますリンク

以上がelement-ui の VUE の ElTableColumn 拡張機能の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 関数の拡張機能とサードパーティ モジュール PHP 関数の拡張機能とサードパーティ モジュール Apr 13, 2024 pm 02:12 PM

PHP 関数の拡張機能とサードパーティ モジュール

VueとElement-UIを使用してカレンダーと日付の選択機能を実装する方法 VueとElement-UIを使用してカレンダーと日付の選択機能を実装する方法 Jul 22, 2023 pm 05:30 PM

VueとElement-UIを使用してカレンダーと日付の選択機能を実装する方法

最初から最後まで: PHP 拡張機能 cURL を使用して HTTP リクエストを行う方法 最初から最後まで: PHP 拡張機能 cURL を使用して HTTP リクエストを行う方法 Jul 29, 2023 pm 05:07 PM

最初から最後まで: PHP 拡張機能 cURL を使用して HTTP リクエストを行う方法

CENTOS7でmbstring拡張機能をインストールするにはどうすればよいですか? CENTOS7でmbstring拡張機能をインストールするにはどうすればよいですか? Jan 06, 2024 pm 09:59 PM

CENTOS7でmbstring拡張機能をインストールするにはどうすればよいですか?

VueとElement-UIを使ってドラッグ&ドロップソート機能を実装する方法 VueとElement-UIを使ってドラッグ&ドロップソート機能を実装する方法 Jul 22, 2023 pm 04:12 PM

VueとElement-UIを使ってドラッグ&ドロップソート機能を実装する方法

VueとElement-UIを使ってメッセージ通知機能を実装する方法 VueとElement-UIを使ってメッセージ通知機能を実装する方法 Jul 21, 2023 pm 12:40 PM

VueとElement-UIを使ってメッセージ通知機能を実装する方法

Vue と Element-UI を使用して画像の遅延読み込みを実装する方法 Vue と Element-UI を使用して画像の遅延読み込みを実装する方法 Jul 22, 2023 pm 04:05 PM

Vue と Element-UI を使用して画像の遅延読み込みを実装する方法

Aurora Push 拡張機能を使用して PHP アプリケーションにバッチ メッセージ プッシュ機能を実装する方法 Aurora Push 拡張機能を使用して PHP アプリケーションにバッチ メッセージ プッシュ機能を実装する方法 Jul 25, 2023 pm 08:07 PM

Aurora Push 拡張機能を使用して PHP アプリケーションにバッチ メッセージ プッシュ機能を実装する方法

See all articles