찾다
웹 프론트엔드JS 튜토리얼ElTableColumn의 내용을 사용자 정의하는 방법

이번에는 ElTableColumn의 컨텐츠를 커스터마이징하는 방법과 ElTableColumn의 컨텐츠를 커스터마이징할 때 주의사항은 무엇인지 알려드리겠습니다. 다음은 실제 사례입니다.

회사에서 새로운 요구 사항이 있어서 검색하려면 ElTableColumn의 헤드를 클릭하세요. 동료들이 이미 이 기능을 만들었지만 사용하기에는 조금 불편합니다.

ElTableColumn은 원래 이런 모습이었습니다.

하고 싶은 일은 이렇습니다.

코드를 직접 넣었을 뿐이라 일일이 설명하기에는 너무 많습니다.

코드 구조:

Component

<!-- ElTableColumnPro.vue -->
<template>
   <el-table-column>
     <template>
      <slot>
       <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(&#39;&#39;,&#39;&#39;,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;

Installation

import ElTableColumnPro from 'components/ElTableColumnPro/index' 
...
...
...
Vue.use(ElTableColumnPro)

Use

 <el-table>
    <el-table-column-pro> </el-table-column-pro>
    <el-table-column-pro> </el-table-column-pro>
    <el-table-column-pro> </el-table-column-pro>
    <el-table-column-pro></el-table-column-pro>
 </el-table>
 <el-table>
    <el-table-column-pro></el-table-column-pro>      
    <el-table-column-pro>
        <template>
           <pre class="brush:php;toolbar:false">{{scope.row.content}}
                         

댓글은 나란히 입력되지 않습니다....

이후에는 방법을 마스터했다고 믿습니다. 이 기사의 사례를 읽으면서 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 다른 관련 기사에 주목하세요!

추천 도서:

vue2는 장바구니 주소 선택을 구현합니다

Angular 서버 측 렌더링 방법 요약

위 내용은 ElTableColumn의 내용을 사용자 정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
如何使用Vue和Element-UI实现图片懒加载功能如何使用Vue和Element-UI实现图片懒加载功能Jul 22, 2023 pm 04:05 PM

如何使用Vue和Element-UI实现图片懒加载功能懒加载(Lazyloading)是一种通过延迟加载图片的技术,可以有效提升页面加载速度,节省带宽并改善用户体验。在Vue项目中,我们可以借助Element-UI和一些插件来实现图片懒加载功能。本文将介绍如何使用Vue和Element-UI来实现图片懒加载,并附上相应的代码示例。一、安装必要的依赖在开始之

Vue实现文件上传的完整指南(axios、element-ui)Vue实现文件上传的完整指南(axios、element-ui)Jun 09, 2023 pm 04:12 PM

Vue实现文件上传的完整指南(axios、element-ui)在现代Web应用程序中,文件上传已经成为一项基本的功能。无论是上传头像、图片、文档或者视频,我们都需要一个可靠的方法来将文件从用户的计算机上传到服务器中。本文将为您提供一份详细的指南,介绍如何使用Vue、axios和element-ui来实现文件上传。什么是axiosaxios是一个基于prom

如何使用Vue和Element-UI实现日历和日期选择功能如何使用Vue和Element-UI实现日历和日期选择功能Jul 22, 2023 pm 05:30 PM

如何使用Vue和Element-UI实现日历和日期选择功能简介:在前端开发中,日历和日期选择功能是非常常见的需求之一。Vue和Element-UI是一对非常强大的开发工具,结合它们可以轻松实现日历和日期选择功能。本文将介绍如何使用Vue和Element-UI来创建一个简单的日历和日期选择功能,并提供代码示例,帮助读者了解实现的具体步骤和方法。准备工作:在开始

如何使用Vue和Element-UI实现多级联动下拉框功能如何使用Vue和Element-UI实现多级联动下拉框功能Jul 20, 2023 pm 11:43 PM

如何使用Vue和Element-UI实现多级联动下拉框功能引言:在Web开发中,多级联动下拉框是一种常见的交互方式。通过选择一个下拉框的选项,可以动态改变后续下拉框的内容。本文将介绍如何使用Vue和Element-UI来实现这一功能,并提供代码示例。一、准备工作首先,我们需要确保已经安装好Vue和Element-UI。可以通过以下命令进行安装:npmins

如何使用Vue和Element-UI实现消息通知功能如何使用Vue和Element-UI实现消息通知功能Jul 21, 2023 pm 12:40 PM

如何使用Vue和Element-UI实现消息通知功能随着前端技术的不断发展,越来越多的网站和应用程序需要实现消息通知功能,以便及时向用户展示重要的信息。在Vue开发中,结合Element-UI框架可以快速实现这一功能。本文将详细介绍如何使用Vue和Element-UI来实现消息通知功能,并提供相关的代码示例。一、准备工作在使用Vue和Element-UI实现

如何使用Vue和Element-UI实现拖拽排序功能如何使用Vue和Element-UI实现拖拽排序功能Jul 22, 2023 pm 04:12 PM

如何使用Vue和Element-UI实现拖拽排序功能前言:在Web开发中,拖拽排序功能是一项常见且实用的功能。本文将介绍如何使用Vue和Element-UI来实现拖拽排序功能,通过代码示例演示实现过程。一、环境搭建安装Node.js在开始之前,需要安装Node.js。可以访问https://nodejs.org/下载并安装对应操作系统的版本。安装VueCL

如何使用Vue和Element-UI实现数据的筛选和搜索功能如何使用Vue和Element-UI实现数据的筛选和搜索功能Jul 21, 2023 pm 08:40 PM

如何使用Vue和Element-UI实现数据的筛选和搜索功能在现代Web开发中,数据的筛选和搜索功能是非常常见和重要的需求。Vue和Element-UI是目前非常流行的前端框架,它们提供了很多强大的工具和组件,可以帮助我们轻松实现数据的筛选和搜索功能。本文将介绍如何使用Vue和Element-UI来实现这些功能,并提供详细的代码示例。首先,我们需要准备一个用

如何使用Vue和Element-UI创建响应式网页界面如何使用Vue和Element-UI创建响应式网页界面Jul 20, 2023 pm 11:01 PM

如何使用Vue和Element-UI创建响应式网页界面在Web开发中,响应式设计是一种必不可少的技术。Vue.js和Element-UI是两个非常受欢迎的前端框架,它们都提供了丰富的工具和组件来构建现代化的响应式网页界面。本文将介绍如何使用Vue和Element-UI来创建响应式网页界面,并将通过代码示例来呈现具体的实现过程。首先,我们需要确保已经安装了Vu

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경